mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-09-01 02:30:33 +00:00
Add ability to set query in OAS Generator (#964)
This commit is contained in:
committed by
GitHub
parent
832162ae0f
commit
491da24c63
@@ -24,26 +24,20 @@ type OasGenerator interface {
|
|||||||
IsStarted() bool
|
IsStarted() bool
|
||||||
Reset()
|
Reset()
|
||||||
GetServiceSpecs() *sync.Map
|
GetServiceSpecs() *sync.Map
|
||||||
|
SetEntriesQuery(query string)
|
||||||
}
|
}
|
||||||
|
|
||||||
type defaultOasGenerator struct {
|
type defaultOasGenerator struct {
|
||||||
started bool
|
started bool
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
serviceSpecs *sync.Map
|
serviceSpecs *sync.Map
|
||||||
dbConn *basenine.Connection
|
dbConn *basenine.Connection
|
||||||
|
entriesQuery string
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetDefaultOasGeneratorInstance(conn *basenine.Connection) *defaultOasGenerator {
|
func GetDefaultOasGeneratorInstance(conn *basenine.Connection) *defaultOasGenerator {
|
||||||
syncOnce.Do(func() {
|
syncOnce.Do(func() {
|
||||||
if conn == nil {
|
|
||||||
c, err := basenine.NewConnection(shared.BasenineHost, shared.BaseninePort)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
conn = c
|
|
||||||
}
|
|
||||||
|
|
||||||
instance = NewDefaultOasGenerator(conn)
|
instance = NewDefaultOasGenerator(conn)
|
||||||
logger.Log.Debug("OAS Generator Initialized")
|
logger.Log.Debug("OAS Generator Initialized")
|
||||||
})
|
})
|
||||||
@@ -80,7 +74,8 @@ func (g *defaultOasGenerator) runGenerator() {
|
|||||||
dataChan := make(chan []byte)
|
dataChan := make(chan []byte)
|
||||||
metaChan := make(chan []byte)
|
metaChan := make(chan []byte)
|
||||||
|
|
||||||
g.dbConn.Query("", dataChan, metaChan)
|
logger.Log.Infof("Querying DB for OAS generator with query '%s'", g.entriesQuery)
|
||||||
|
g.dbConn.Query(g.entriesQuery, dataChan, metaChan)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@@ -181,12 +176,25 @@ func (g *defaultOasGenerator) GetServiceSpecs() *sync.Map {
|
|||||||
return g.serviceSpecs
|
return g.serviceSpecs
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDefaultOasGenerator(c *basenine.Connection) *defaultOasGenerator {
|
func (g *defaultOasGenerator) SetEntriesQuery(query string) {
|
||||||
|
g.entriesQuery = query
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDefaultOasGenerator(conn *basenine.Connection) *defaultOasGenerator {
|
||||||
|
if conn == nil {
|
||||||
|
logger.Log.Infof("Creating new DB connection for OAS generator to address %s:%s", shared.BasenineHost, shared.BaseninePort)
|
||||||
|
newConn, err := basenine.NewConnection(shared.BasenineHost, shared.BaseninePort)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
conn = newConn
|
||||||
|
}
|
||||||
|
|
||||||
return &defaultOasGenerator{
|
return &defaultOasGenerator{
|
||||||
started: false,
|
started: false,
|
||||||
ctx: nil,
|
ctx: nil,
|
||||||
cancel: nil,
|
cancel: nil,
|
||||||
serviceSpecs: nil,
|
serviceSpecs: nil,
|
||||||
dbConn: c,
|
dbConn: conn,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -9,6 +9,7 @@ import (
|
|||||||
|
|
||||||
func TestOASGen(t *testing.T) {
|
func TestOASGen(t *testing.T) {
|
||||||
gen := new(defaultOasGenerator)
|
gen := new(defaultOasGenerator)
|
||||||
|
gen.dbConn = GetFakeDBConn(`{"startedDateTime": "20000101","request": {"url": "https://host/path", "method": "GET"}, "response": {"status": 200}}`)
|
||||||
gen.serviceSpecs = &sync.Map{}
|
gen.serviceSpecs = &sync.Map{}
|
||||||
|
|
||||||
e := new(har.Entry)
|
e := new(har.Entry)
|
||||||
@@ -21,6 +22,7 @@ func TestOASGen(t *testing.T) {
|
|||||||
Destination: "some",
|
Destination: "some",
|
||||||
Entry: *e,
|
Entry: *e,
|
||||||
}
|
}
|
||||||
|
gen.Start()
|
||||||
gen.handleHARWithSource(ews)
|
gen.handleHARWithSource(ews)
|
||||||
g, ok := gen.serviceSpecs.Load("some")
|
g, ok := gen.serviceSpecs.Load("some")
|
||||||
if !ok {
|
if !ok {
|
||||||
@@ -33,4 +35,9 @@ func TestOASGen(t *testing.T) {
|
|||||||
}
|
}
|
||||||
specText, _ := json.Marshal(spec)
|
specText, _ := json.Marshal(spec)
|
||||||
t.Log(string(specText))
|
t.Log(string(specText))
|
||||||
|
|
||||||
|
if !gen.IsStarted() {
|
||||||
|
t.Errorf("Should be started")
|
||||||
|
}
|
||||||
|
gen.Stop()
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,10 @@
|
|||||||
package oas
|
package oas
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -11,13 +13,22 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/chanced/openapi"
|
"github.com/chanced/openapi"
|
||||||
"github.com/op/go-logging"
|
|
||||||
"github.com/up9inc/mizu/shared/logger"
|
"github.com/up9inc/mizu/shared/logger"
|
||||||
"github.com/wI2L/jsondiff"
|
"github.com/wI2L/jsondiff"
|
||||||
|
|
||||||
|
basenine "github.com/up9inc/basenine/client/go"
|
||||||
"github.com/up9inc/mizu/agent/pkg/har"
|
"github.com/up9inc/mizu/agent/pkg/har"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func GetFakeDBConn(send string) *basenine.Connection {
|
||||||
|
dummyConn := new(basenine.Connection)
|
||||||
|
dummyConn.Conn = FakeConn{
|
||||||
|
sendBuffer: bytes.NewBufferString(send),
|
||||||
|
receiveBuffer: bytes.NewBufferString(""),
|
||||||
|
}
|
||||||
|
return dummyConn
|
||||||
|
}
|
||||||
|
|
||||||
// if started via env, write file into subdir
|
// if started via env, write file into subdir
|
||||||
func outputSpec(label string, spec *openapi.OpenAPI, t *testing.T) string {
|
func outputSpec(label string, spec *openapi.OpenAPI, t *testing.T) string {
|
||||||
content, err := json.MarshalIndent(spec, "", " ")
|
content, err := json.MarshalIndent(spec, "", " ")
|
||||||
@@ -43,14 +54,15 @@ func outputSpec(label string, spec *openapi.OpenAPI, t *testing.T) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestEntries(t *testing.T) {
|
func TestEntries(t *testing.T) {
|
||||||
logger.InitLoggerStd(logging.INFO)
|
//logger.InitLoggerStd(logging.INFO) causes race condition
|
||||||
files, err := getFiles("./test_artifacts/")
|
files, err := getFiles("./test_artifacts/")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Log(err)
|
t.Log(err)
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
gen := NewDefaultOasGenerator(nil)
|
dummyConn := GetFakeDBConn("\n")
|
||||||
|
gen := NewDefaultOasGenerator(dummyConn)
|
||||||
gen.serviceSpecs = new(sync.Map)
|
gen.serviceSpecs = new(sync.Map)
|
||||||
loadStartingOAS("test_artifacts/catalogue.json", "catalogue", gen.serviceSpecs)
|
loadStartingOAS("test_artifacts/catalogue.json", "catalogue", gen.serviceSpecs)
|
||||||
loadStartingOAS("test_artifacts/trcc.json", "trcc-api-service", gen.serviceSpecs)
|
loadStartingOAS("test_artifacts/trcc.json", "trcc-api-service", gen.serviceSpecs)
|
||||||
@@ -124,7 +136,8 @@ func TestEntries(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestFileSingle(t *testing.T) {
|
func TestFileSingle(t *testing.T) {
|
||||||
gen := NewDefaultOasGenerator(nil)
|
dummyConn := GetFakeDBConn("\n")
|
||||||
|
gen := NewDefaultOasGenerator(dummyConn)
|
||||||
gen.serviceSpecs = new(sync.Map)
|
gen.serviceSpecs = new(sync.Map)
|
||||||
// loadStartingOAS()
|
// loadStartingOAS()
|
||||||
file := "test_artifacts/params.har"
|
file := "test_artifacts/params.har"
|
||||||
@@ -214,7 +227,8 @@ func loadStartingOAS(file string, label string, specs *sync.Map) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestEntriesNegative(t *testing.T) {
|
func TestEntriesNegative(t *testing.T) {
|
||||||
gen := NewDefaultOasGenerator(nil)
|
dummyConn := GetFakeDBConn("\n")
|
||||||
|
gen := NewDefaultOasGenerator(dummyConn)
|
||||||
gen.serviceSpecs = new(sync.Map)
|
gen.serviceSpecs = new(sync.Map)
|
||||||
files := []string{"invalid"}
|
files := []string{"invalid"}
|
||||||
_, err := feedEntries(files, false, gen)
|
_, err := feedEntries(files, false, gen)
|
||||||
@@ -225,7 +239,8 @@ func TestEntriesNegative(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestEntriesPositive(t *testing.T) {
|
func TestEntriesPositive(t *testing.T) {
|
||||||
gen := NewDefaultOasGenerator(nil)
|
dummyConn := GetFakeDBConn("\n")
|
||||||
|
gen := NewDefaultOasGenerator(dummyConn)
|
||||||
gen.serviceSpecs = new(sync.Map)
|
gen.serviceSpecs = new(sync.Map)
|
||||||
files := []string{"test_artifacts/params.har"}
|
files := []string{"test_artifacts/params.har"}
|
||||||
_, err := feedEntries(files, false, gen)
|
_, err := feedEntries(files, false, gen)
|
||||||
@@ -267,3 +282,17 @@ func TestLoadValid3_1(t *testing.T) {
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FakeConn struct {
|
||||||
|
sendBuffer *bytes.Buffer
|
||||||
|
receiveBuffer *bytes.Buffer
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f FakeConn) Read(p []byte) (int, error) { return f.sendBuffer.Read(p) }
|
||||||
|
func (f FakeConn) Write(p []byte) (int, error) { return f.receiveBuffer.Write(p) }
|
||||||
|
func (FakeConn) Close() error { return nil }
|
||||||
|
func (FakeConn) LocalAddr() net.Addr { return nil }
|
||||||
|
func (FakeConn) RemoteAddr() net.Addr { return nil }
|
||||||
|
func (FakeConn) SetDeadline(t time.Time) error { return nil }
|
||||||
|
func (FakeConn) SetReadDeadline(t time.Time) error { return nil }
|
||||||
|
func (FakeConn) SetWriteDeadline(t time.Time) error { return nil }
|
||||||
|
Reference in New Issue
Block a user