Skip to content
Snippets Groups Projects
Commit 51710b71 authored by André Sterba's avatar André Sterba
Browse files

Adjust tests to match topology service refactoring

parent 38e9f0f9
Branches
No related tags found
5 merge requests!376Add additional example application hostname-checker,!349Northbound refactoring to implement NIB concept for devices,!343Add basic application framework and example application to show interaction between events an NBI,!339Create basic venv-manager for use with arista,!324Provide prototype implementation for topology handling
......@@ -2,6 +2,8 @@ package topology
import (
"code.fbi.h-da.de/danet/gosdn/controller/topology/links"
"code.fbi.h-da.de/danet/gosdn/controller/topology/nodes"
"code.fbi.h-da.de/danet/gosdn/controller/topology/ports"
"code.fbi.h-da.de/danet/gosdn/controller/topology/store"
)
......@@ -16,19 +18,47 @@ type Service interface {
// service is a service for ports
type service struct {
store Store
store Store
nodeService nodes.Service
portService ports.Service
}
// NewTopologyService creates a new TopologyService
func NewTopologyService(store Store) Service {
func NewTopologyService(
store Store,
nodeService nodes.Service,
portService ports.Service,
) Service {
return &service{
store: store,
store: store,
nodeService: nodeService,
portService: portService,
}
}
// AddLink adds a new link to the topology
func (t *service) AddLink(link links.Link) error {
err := t.store.Add(link)
// These checks are also happening in the current NBI implementation.
// This should be refactored to only to these checks here.
_, err := t.nodeService.EnsureExists(link.SourceNode)
if err != nil {
return err
}
_, err = t.portService.EnsureExists(link.SourcePort)
if err != nil {
return err
}
_, err = t.nodeService.EnsureExists(link.TargetNode)
if err != nil {
return err
}
_, err = t.portService.EnsureExists(link.TargetPort)
if err != nil {
return err
}
err = t.store.Add(link)
if err != nil {
return err
}
......
......@@ -11,17 +11,31 @@ import (
"github.com/google/uuid"
)
func getTestNode() nodes.Node {
func getTestSourceNode() nodes.Node {
return nodes.Node{
ID: uuid.MustParse("44fb4aa4-c53c-4cf9-a081-5aabc61c7610"),
Name: "Test-Node",
Name: "Test-Source-Node",
}
}
func getTestPort() ports.Port {
func getTestTargetNode() nodes.Node {
return nodes.Node{
ID: uuid.MustParse("44fb4aa4-c53c-4cf9-a081-5aabc61c7612"),
Name: "Test-Target-Node",
}
}
func getTestSourcePort() ports.Port {
return ports.Port{
ID: uuid.MustParse("1fa479e7-d393-4d45-822d-485cc1f05fce"),
Name: "Test-Port",
Name: "Test-Source-Port",
}
}
func getTestTargetPort() ports.Port {
return ports.Port{
ID: uuid.MustParse("1fa479e7-d393-4d45-822d-485cc1f05fc2"),
Name: "Test-Target-Port",
}
}
......@@ -29,16 +43,10 @@ func getTestLink() links.Link {
return links.Link{
ID: uuid.MustParse("5eb474f1-428e-4503-ba68-dcf9bef53467"),
Name: "Test-Link",
SourceNode: getTestNode(),
TargetNode: nodes.Node{
ID: uuid.MustParse("44fb4aa4-c53c-4cf9-a081-5aabc61c7612"),
Name: "Test-Node",
},
SourcePort: getTestPort(),
TargetPort: ports.Port{
ID: uuid.MustParse("1fa479e7-d393-4d45-822d-485cc1f05fc2"),
Name: "Test-Port",
},
SourceNode: getTestSourceNode(),
TargetNode: getTestTargetNode(),
SourcePort: getTestSourcePort(),
TargetPort: getTestTargetPort(),
}
}
......@@ -59,9 +67,37 @@ func getTestStoreWithLinks(t *testing.T, nodes []links.Link) Store {
return store
}
func getTestStoreWithNodes(t *testing.T, nodesToAdd []nodes.Node) nodes.Store {
store := store.NewGenericStore[nodes.Node]()
for _, node := range nodesToAdd {
err := store.Add(node)
if err != nil {
t.Fatalf("failed to prepare test store while adding node: %v", err)
}
}
return store
}
func getTestStoreWithPorts(t *testing.T, portsToAdd []ports.Port) ports.Store {
store := store.NewGenericStore[ports.Port]()
for _, port := range portsToAdd {
err := store.Add(port)
if err != nil {
t.Fatalf("failed to prepare test store while adding port: %v", err)
}
}
return store
}
func TestNewTopologyService(t *testing.T) {
type args struct {
store Store
store Store
nodeService nodes.Service
portService ports.Service
}
tests := []struct {
name string
......@@ -71,14 +107,20 @@ func TestNewTopologyService(t *testing.T) {
{
name: "should create a new topology service",
args: args{
store: getTestStoreWithLinks(t, []links.Link{}),
store: getTestStoreWithLinks(t, []links.Link{}),
nodeService: nodes.NewNodeService(getTestStoreWithNodes(t, []nodes.Node{})),
portService: ports.NewPortService(getTestStoreWithPorts(t, []ports.Port{})),
},
want: NewTopologyService(getTestStoreWithLinks(t, []links.Link{})),
want: NewTopologyService(
getTestStoreWithLinks(t, []links.Link{}),
nodes.NewNodeService(getTestStoreWithNodes(t, []nodes.Node{})),
ports.NewPortService(getTestStoreWithPorts(t, []ports.Port{})),
),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := NewTopologyService(tt.args.store); !reflect.DeepEqual(got, tt.want) {
if got := NewTopologyService(tt.args.store, tt.args.nodeService, tt.args.portService); !reflect.DeepEqual(got, tt.want) {
t.Errorf("NewNodeService() = %v, want %v", got, tt.want)
}
})
......@@ -87,7 +129,9 @@ func TestNewTopologyService(t *testing.T) {
func TestTopologyService_AddLink(t *testing.T) {
type fields struct {
store Store
store Store
nodeService nodes.Service
portService ports.Service
}
type args struct {
link links.Link
......@@ -103,6 +147,14 @@ func TestTopologyService_AddLink(t *testing.T) {
name: "should add a link to the store",
fields: fields{
store: store.NewGenericStore[links.Link](),
nodeService: nodes.NewNodeService(getTestStoreWithNodes(
t,
[]nodes.Node{getTestSourceNode(), getTestTargetNode()},
)),
portService: ports.NewPortService(getTestStoreWithPorts(
t,
[]ports.Port{getTestSourcePort(), getTestTargetPort()},
)),
},
args: args{
link: getTestLink(),
......@@ -114,7 +166,9 @@ func TestTopologyService_AddLink(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &service{
store: tt.fields.store,
store: tt.fields.store,
nodeService: tt.fields.nodeService,
portService: tt.fields.portService,
}
err := p.AddLink(tt.args.link)
if (err != nil) != tt.wantErr {
......@@ -136,7 +190,9 @@ func TestTopologyService_AddLink(t *testing.T) {
func TestTopologyService_Update(t *testing.T) {
type fields struct {
store Store
store Store
nodeService nodes.Service
portService ports.Service
}
type args struct {
link links.Link
......@@ -151,7 +207,9 @@ func TestTopologyService_Update(t *testing.T) {
{
name: "should update an existing link",
fields: fields{
store: getTestStoreWithLinks(t, []links.Link{getTestLink()}),
store: getTestStoreWithLinks(t, []links.Link{getTestLink()}),
nodeService: nodes.NewNodeService(getTestStoreWithNodes(t, []nodes.Node{})),
portService: ports.NewPortService(getTestStoreWithPorts(t, []ports.Port{})),
},
args: args{
link: getTestLink(),
......@@ -163,7 +221,9 @@ func TestTopologyService_Update(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &service{
store: tt.fields.store,
store: tt.fields.store,
nodeService: tt.fields.nodeService,
portService: tt.fields.portService,
}
err := p.UpdateLink(tt.args.link)
if (err != nil) != tt.wantErr {
......@@ -185,7 +245,9 @@ func TestTopologyService_Update(t *testing.T) {
func TestNodeService_Delete(t *testing.T) {
type fields struct {
store Store
store Store
nodeService nodes.Service
portService ports.Service
}
type args struct {
link links.Link
......@@ -200,7 +262,9 @@ func TestNodeService_Delete(t *testing.T) {
{
name: "should delete an existing link",
fields: fields{
store: getTestStoreWithLinks(t, []links.Link{getTestLink()}),
store: getTestStoreWithLinks(t, []links.Link{getTestLink()}),
nodeService: nodes.NewNodeService(getTestStoreWithNodes(t, []nodes.Node{})),
portService: ports.NewPortService(getTestStoreWithPorts(t, []ports.Port{})),
},
args: args{
link: getTestLink(),
......@@ -210,7 +274,9 @@ func TestNodeService_Delete(t *testing.T) {
{
name: "should fail if a node does not exists",
fields: fields{
store: store.NewGenericStore[links.Link](),
store: store.NewGenericStore[links.Link](),
nodeService: nodes.NewNodeService(getTestStoreWithNodes(t, []nodes.Node{})),
portService: ports.NewPortService(getTestStoreWithPorts(t, []ports.Port{})),
},
args: args{
link: getTestLink(),
......@@ -221,7 +287,9 @@ func TestNodeService_Delete(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &service{
store: tt.fields.store,
store: tt.fields.store,
nodeService: tt.fields.nodeService,
portService: tt.fields.portService,
}
if err := p.DeleteLink(tt.args.link); (err != nil) != tt.wantErr {
t.Errorf("service.Delete() error = %v, wantErr %v", err, tt.wantErr)
......@@ -232,7 +300,9 @@ func TestNodeService_Delete(t *testing.T) {
func TestTopologyService_Get(t *testing.T) {
type fields struct {
store Store
store Store
nodeService nodes.Service
portService ports.Service
}
type args struct {
query store.Query
......@@ -247,7 +317,9 @@ func TestTopologyService_Get(t *testing.T) {
{
name: "should error if link with uuid is not in store",
fields: fields{
store: getTestStoreWithLinks(t, []links.Link{}),
store: getTestStoreWithLinks(t, []links.Link{}),
nodeService: nodes.NewNodeService(getTestStoreWithNodes(t, []nodes.Node{})),
portService: ports.NewPortService(getTestStoreWithPorts(t, []ports.Port{})),
},
args: args{
query: store.Query{
......@@ -276,7 +348,9 @@ func TestTopologyService_Get(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &service{
store: tt.fields.store,
store: tt.fields.store,
nodeService: tt.fields.nodeService,
portService: tt.fields.portService,
}
got, err := p.Get(tt.args.query)
if (err != nil) != tt.wantErr {
......@@ -292,7 +366,9 @@ func TestTopologyService_Get(t *testing.T) {
func TestTopologyService_GetAll(t *testing.T) {
type fields struct {
store Store
store Store
nodeService nodes.Service
portService ports.Service
}
tests := []struct {
name string
......@@ -303,7 +379,9 @@ func TestTopologyService_GetAll(t *testing.T) {
{
name: "should get all stored links",
fields: fields{
store: getTestStoreWithLinks(t, []links.Link{getTestLink()}),
store: getTestStoreWithLinks(t, []links.Link{getTestLink()}),
nodeService: nodes.NewNodeService(getTestStoreWithNodes(t, []nodes.Node{})),
portService: ports.NewPortService(getTestStoreWithPorts(t, []ports.Port{})),
},
want: []links.Link{getTestLink()},
wantErr: false,
......@@ -312,7 +390,9 @@ func TestTopologyService_GetAll(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
p := &service{
store: tt.fields.store,
store: tt.fields.store,
nodeService: tt.fields.nodeService,
portService: tt.fields.portService,
}
got, err := p.GetAll()
if (err != nil) != tt.wantErr {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment