mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-08-18 16:38:38 +00:00
150 lines
3.4 KiB
Go
150 lines
3.4 KiB
Go
package controllers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/up9inc/mizu/agent/pkg/dependency"
|
|
"github.com/up9inc/mizu/agent/pkg/servicemap"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/suite"
|
|
tapApi "github.com/up9inc/mizu/tap/api"
|
|
)
|
|
|
|
const (
|
|
a = "aService"
|
|
b = "bService"
|
|
Ip = "127.0.0.1"
|
|
Port = "80"
|
|
)
|
|
|
|
var (
|
|
TCPEntryA = &tapApi.TCP{
|
|
Name: a,
|
|
Port: Port,
|
|
IP: fmt.Sprintf("%s.%s", Ip, a),
|
|
}
|
|
TCPEntryB = &tapApi.TCP{
|
|
Name: b,
|
|
Port: Port,
|
|
IP: fmt.Sprintf("%s.%s", Ip, b),
|
|
}
|
|
)
|
|
|
|
var ProtocolHttp = &tapApi.Protocol{
|
|
Name: "http",
|
|
LongName: "Hypertext Transfer Protocol -- HTTP/1.1",
|
|
Abbreviation: "HTTP",
|
|
Macro: "http",
|
|
Version: "1.1",
|
|
BackgroundColor: "#205cf5",
|
|
ForegroundColor: "#ffffff",
|
|
FontSize: 12,
|
|
ReferenceLink: "https://datatracker.ietf.org/doc/html/rfc2616",
|
|
Ports: []string{"80", "443", "8080"},
|
|
Priority: 0,
|
|
}
|
|
|
|
type ServiceMapControllerSuite struct {
|
|
suite.Suite
|
|
|
|
c *ServiceMapController
|
|
w *httptest.ResponseRecorder
|
|
g *gin.Context
|
|
}
|
|
|
|
func (s *ServiceMapControllerSuite) SetupTest() {
|
|
dependency.RegisterGenerator(dependency.ServiceMapGeneratorDependency, func() interface{} { return servicemap.GetDefaultServiceMapInstance() })
|
|
|
|
s.c = NewServiceMapController()
|
|
s.c.service.Enable()
|
|
s.c.service.(servicemap.ServiceMapSink).NewTCPEntry(TCPEntryA, TCPEntryB, ProtocolHttp)
|
|
|
|
s.w = httptest.NewRecorder()
|
|
s.g, _ = gin.CreateTestContext(s.w)
|
|
}
|
|
|
|
func (s *ServiceMapControllerSuite) TestGetStatus() {
|
|
assert := s.Assert()
|
|
|
|
s.c.Status(s.g)
|
|
assert.Equal(http.StatusOK, s.w.Code)
|
|
|
|
var status servicemap.ServiceMapStatus
|
|
err := json.Unmarshal(s.w.Body.Bytes(), &status)
|
|
assert.NoError(err)
|
|
assert.Equal("enabled", status.Status)
|
|
assert.Equal(1, status.EntriesProcessedCount)
|
|
assert.Equal(2, status.NodeCount)
|
|
assert.Equal(1, status.EdgeCount)
|
|
}
|
|
|
|
func (s *ServiceMapControllerSuite) TestGet() {
|
|
assert := s.Assert()
|
|
|
|
s.c.Get(s.g)
|
|
assert.Equal(http.StatusOK, s.w.Code)
|
|
|
|
var response servicemap.ServiceMapResponse
|
|
err := json.Unmarshal(s.w.Body.Bytes(), &response)
|
|
assert.NoError(err)
|
|
|
|
// response status
|
|
assert.Equal("enabled", response.Status.Status)
|
|
assert.Equal(1, response.Status.EntriesProcessedCount)
|
|
assert.Equal(2, response.Status.NodeCount)
|
|
assert.Equal(1, response.Status.EdgeCount)
|
|
|
|
// response nodes
|
|
aNode := servicemap.ServiceMapNode{
|
|
Id: 1,
|
|
Name: TCPEntryA.Name,
|
|
Entry: TCPEntryA,
|
|
Resolved: true,
|
|
Count: 1,
|
|
}
|
|
bNode := servicemap.ServiceMapNode{
|
|
Id: 2,
|
|
Name: TCPEntryB.Name,
|
|
Entry: TCPEntryB,
|
|
Resolved: true,
|
|
Count: 1,
|
|
}
|
|
assert.Contains(response.Nodes, aNode)
|
|
assert.Contains(response.Nodes, bNode)
|
|
assert.Len(response.Nodes, 2)
|
|
|
|
// response edges
|
|
assert.Equal([]servicemap.ServiceMapEdge{
|
|
{
|
|
Source: aNode,
|
|
Destination: bNode,
|
|
Protocol: ProtocolHttp,
|
|
Count: 1,
|
|
},
|
|
}, response.Edges)
|
|
}
|
|
|
|
func (s *ServiceMapControllerSuite) TestGetReset() {
|
|
assert := s.Assert()
|
|
|
|
s.c.Reset(s.g)
|
|
assert.Equal(http.StatusOK, s.w.Code)
|
|
|
|
var status servicemap.ServiceMapStatus
|
|
err := json.Unmarshal(s.w.Body.Bytes(), &status)
|
|
assert.NoError(err)
|
|
assert.Equal("enabled", status.Status)
|
|
assert.Equal(0, status.EntriesProcessedCount)
|
|
assert.Equal(0, status.NodeCount)
|
|
assert.Equal(0, status.EdgeCount)
|
|
}
|
|
|
|
func TestServiceMapControllerSuite(t *testing.T) {
|
|
suite.Run(t, new(ServiceMapControllerSuite))
|
|
}
|