Skip to content
Snippets Groups Projects
Commit 2e4a2a05 authored by Malte Bauch's avatar Malte Bauch
Browse files

Store for links adjusted

Handling of links with the help of a store is handled quite differently
than how it is done in other cases (e.g., network element, user, roles).
Therefore the methods have been adjusted to deal with this fact.
parent 1810f1f0
No related branches found
No related tags found
No related merge requests found
Pipeline #178269 passed
This commit is part of merge request !697. Comments created here will be created in the context of that merge request.
...@@ -78,8 +78,19 @@ func (t *TopologyServer) AddLink(ctx context.Context, request *topopb.AddLinkReq ...@@ -78,8 +78,19 @@ func (t *TopologyServer) AddLink(ctx context.Context, request *topopb.AddLinkReq
return nil, status.Errorf(codes.Aborted, "%v", err) return nil, status.Errorf(codes.Aborted, "%v", err)
} }
// check if UUID is set
var id uuid.UUID
if requestId := request.Link.Id; requestId != "" {
id, err = uuid.Parse(requestId)
if err != nil {
return nil, err
}
} else {
id = uuid.New()
}
link := links.Link{ link := links.Link{
ID: uuid.New(), ID: id,
Name: request.Link.Name, Name: request.Link.Name,
SourceNode: sourceNode, SourceNode: sourceNode,
SourcePort: sourcePort, SourcePort: sourcePort,
......
...@@ -51,25 +51,6 @@ func NewTopologyService( ...@@ -51,25 +51,6 @@ func NewTopologyService(
// AddLink adds a new link to the topology. // AddLink adds a new link to the topology.
func (t *TopoService) AddLink(link links.Link) error { func (t *TopoService) AddLink(link links.Link) error {
// 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
// }
ctx := context.Background() ctx := context.Background()
err := t.store.Add(ctx, link) err := t.store.Add(ctx, link)
......
...@@ -62,7 +62,7 @@ func (s *DatabaseTopologyStore) Get(ctx context.Context, query query.Query) (lin ...@@ -62,7 +62,7 @@ func (s *DatabaseTopologyStore) Get(ctx context.Context, query query.Query) (lin
} }
func (s *DatabaseTopologyStore) getByID(ctx context.Context, idOfTopology uuid.UUID) (loadedTopology links.Link, err error) { func (s *DatabaseTopologyStore) getByID(ctx context.Context, idOfTopology uuid.UUID) (loadedTopology links.Link, err error) {
result := s.collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfTopology.String()}}) result := s.collection.FindOne(ctx, bson.D{primitive.E{Key: "_id", Value: idOfTopology}})
if result == nil { if result == nil {
return loadedTopology, customerrs.CouldNotFindError{ID: idOfTopology} return loadedTopology, customerrs.CouldNotFindError{ID: idOfTopology}
} }
...@@ -136,7 +136,7 @@ func (s *DatabaseTopologyStore) Update(ctx context.Context, linkToUpdate links.L ...@@ -136,7 +136,7 @@ func (s *DatabaseTopologyStore) Update(ctx context.Context, linkToUpdate links.L
err = s.collection. err = s.collection.
FindOneAndUpdate( FindOneAndUpdate(
ctx, bson.M{"_id": linkToUpdate.ID.String()}, update, &opt). ctx, bson.M{"_id": linkToUpdate.ID}, update, &opt).
Decode(&updatedLink) Decode(&updatedLink)
if err != nil { if err != nil {
return customerrs.CouldNotUpdateError{Identifier: linkToUpdate.ID, Type: linkToUpdate, Err: err} return customerrs.CouldNotUpdateError{Identifier: linkToUpdate.ID, Type: linkToUpdate, Err: err}
...@@ -147,7 +147,7 @@ func (s *DatabaseTopologyStore) Update(ctx context.Context, linkToUpdate links.L ...@@ -147,7 +147,7 @@ func (s *DatabaseTopologyStore) Update(ctx context.Context, linkToUpdate links.L
// Delete deletes a link from the link store. // Delete deletes a link from the link store.
func (s *DatabaseTopologyStore) Delete(ctx context.Context, linkToDelete links.Link) (err error) { func (s *DatabaseTopologyStore) Delete(ctx context.Context, linkToDelete links.Link) (err error) {
_, err = s.collection.DeleteOne(ctx, bson.D{primitive.E{Key: linkToDelete.ID.String()}}) _, err = s.collection.DeleteOne(ctx, bson.D{primitive.E{Key: "_id", Value: linkToDelete.ID}})
if err != nil { if err != nil {
return err return err
} }
......
...@@ -78,81 +78,78 @@ func TestCreateTopologyAndGetIt(t *testing.T) { ...@@ -78,81 +78,78 @@ func TestCreateTopologyAndGetIt(t *testing.T) {
assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].TargetPort.Configuration.PrefixLength) assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].TargetPort.Configuration.PrefixLength)
} }
// goSDN crashed due to validation errors in the topology service. If bug is fixed, uncomment and finish this test. func TestCreateTopologyFailsValidation(t *testing.T) {
//func TestCreateTopologyFailsValidation(t *testing.T) { defer integration_test_utils.ApplySDNConfig(conn, ctx, defaultSDNConfig)
// defer integration_test_utils.ApplySDNConfig(conn, ctx, defaultSDNConfig)
// addLinkRequest := topologyPb.AddLinkRequest{
// addLinkRequest := topologyPb.AddLinkRequest{ Link: &topologyPb.Link{
// Link: &topologyPb.Link{ Name: "Link1",
// Name: "Link1", SourceNode: &topologyPb.Node{Name: "Node1"},
// SourceNode: &topologyPb.Node{Name: "Node1"}, TargetNode: &topologyPb.Node{Name: "Node2"},
// TargetNode: &topologyPb.Node{Name: "Node2"}, SourcePort: &topologyPb.Port{Name: "Port1"},
// SourcePort: &topologyPb.Port{Name: "Port1"}, TargetPort: &topologyPb.Port{Name: "Port2"}},
// TargetPort: &topologyPb.Port{Name: "Port2"}}, }
// }
// topologyService := topologyPb.NewTopologyServiceClient(conn)
// topologyService := topologyPb.NewTopologyServiceClient(conn) resp, err := topologyService.AddLink(ctx, &addLinkRequest)
// _, err := topologyService.AddLink(ctx, &addLinkRequest) assert.Error(t, err, "Test expected an error, none received.")
// assert.Nil(t, resp, "Test expects the resp to be nil if an error is thrown beforehand.")
// if err == nil { }
// t.Errorf("Test expected an error, none received.")
// }
//}
// Test that creates a topology and then deletes it and checks that all topologies are deleted. // Test that creates a topology and then deletes it and checks that all topologies are deleted.
// Can't delete topology because of bug in goSDN. If bug is fixed, uncomment and finish this test. // Can't delete topology because of bug in goSDN. If bug is fixed, uncomment and finish this test.
//func TestCreateThenDeleteTopologyAndGetEmptyTopologies(t *testing.T) { func TestCreateThenDeleteTopologyAndGetEmptyTopologies(t *testing.T) {
// defer integration_test_utils.ApplySDNConfig(conn, ctx, defaultSDNConfig) defer integration_test_utils.ApplySDNConfig(conn, ctx, defaultSDNConfig)
//
// addLinkRequest := topologyPb.AddLinkRequest{ addLinkRequest := topologyPb.AddLinkRequest{
// Link: &topologyPb.Link{ Link: &topologyPb.Link{
// Name: "Link1", Id: "8a01b8b0-6244-42bf-b72a-3821efc1a353",
// SourceNode: &topologyPb.Node{Name: "Node1"}, Name: "Link1",
// TargetNode: &topologyPb.Node{Name: "Node2"}, SourceNode: &topologyPb.Node{Name: "Node1"},
// SourcePort: &topologyPb.Port{Name: "Port1", TargetNode: &topologyPb.Node{Name: "Node2"},
// Configuration: &topologyPb.Configuration{ SourcePort: &topologyPb.Port{Name: "Port1",
// Ip: "10.0.0.1", Configuration: &topologyPb.Configuration{
// PrefixLength: 24}}, Ip: "10.0.0.1",
// TargetPort: &topologyPb.Port{Name: "Port2", PrefixLength: 24}},
// Configuration: &topologyPb.Configuration{ TargetPort: &topologyPb.Port{Name: "Port2",
// Ip: "10.0.0.2", Configuration: &topologyPb.Configuration{
// PrefixLength: 24}}}, Ip: "10.0.0.2",
// } PrefixLength: 24}}},
// }
// topologyService := topologyPb.NewTopologyServiceClient(conn)
// _, err := topologyService.AddLink(ctx, &addLinkRequest) topologyService := topologyPb.NewTopologyServiceClient(conn)
// if err != nil { _, err := topologyService.AddLink(ctx, &addLinkRequest)
// t.Errorf("Error while adding link: %v", err) if err != nil {
// } t.Errorf("Error while adding link: %v", err)
// }
// getTopolgyResponse, err := topologyService.GetTopology(ctx, &topologyPb.GetTopologyRequest{})
// if err != nil { getTopolgyResponse, err := topologyService.GetTopology(ctx, &topologyPb.GetTopologyRequest{})
// t.Errorf("Error while getting topology: %v", err) if err != nil {
// } t.Errorf("Error while getting topology: %v", err)
// }
// assert.Equal(t, 1, len(getTopolgyResponse.Toplogy.Links))
// assert.Equal(t, "Link1", getTopolgyResponse.Toplogy.Links[0].Name) assert.Equal(t, 1, len(getTopolgyResponse.Toplogy.Links))
// assert.Equal(t, "Node1", getTopolgyResponse.Toplogy.Links[0].SourceNode.Name) assert.Equal(t, "Link1", getTopolgyResponse.Toplogy.Links[0].Name)
// assert.Equal(t, "Node2", getTopolgyResponse.Toplogy.Links[0].TargetNode.Name) assert.Equal(t, "Node1", getTopolgyResponse.Toplogy.Links[0].SourceNode.Name)
// assert.Equal(t, "Port1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Name) assert.Equal(t, "Node2", getTopolgyResponse.Toplogy.Links[0].TargetNode.Name)
// assert.Equal(t, "10.0.0.1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.Ip) assert.Equal(t, "Port1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Name)
// assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.PrefixLength) assert.Equal(t, "10.0.0.1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.Ip)
// assert.Equal(t, "Port2", getTopolgyResponse.Toplogy.Links[0].TargetPort.Name) assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.PrefixLength)
// assert.Equal(t, "10.0.0.2", getTopolgyResponse.Toplogy.Links[0].TargetPort.Configuration.Ip) assert.Equal(t, "Port2", getTopolgyResponse.Toplogy.Links[0].TargetPort.Name)
// assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].TargetPort.Configuration.PrefixLength) assert.Equal(t, "10.0.0.2", getTopolgyResponse.Toplogy.Links[0].TargetPort.Configuration.Ip)
// assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].TargetPort.Configuration.PrefixLength)
// deleteLinkRequest := topologyPb.DeleteLinkRequest{Id: getTopolgyResponse.Toplogy.Links[0].Id}
// _, err = topologyService.DeleteLink(ctx, &deleteLinkRequest) deleteLinkRequest := topologyPb.DeleteLinkRequest{Id: getTopolgyResponse.Toplogy.Links[0].Id}
// if err != nil { _, err = topologyService.DeleteLink(ctx, &deleteLinkRequest)
// t.Errorf("Error while deleting link: %v", err) if err != nil {
// } t.Errorf("Error while deleting link: %v", err)
// getTopologyRequest := &topologyPb.GetTopologyRequest{} }
// getTopologyResponse, err := topologyService.GetTopology(ctx, getTopologyRequest) getTopologyRequest := &topologyPb.GetTopologyRequest{}
// if err != nil { getTopologyResponse, err := topologyService.GetTopology(ctx, getTopologyRequest)
// t.Errorf("Error while getting topologies: %v", err) if err != nil {
// } t.Errorf("Error while getting topologies: %v", err)
// }
// assert.Equal(t, 0, len(getTopologyResponse.Toplogy.Links))
//} assert.Equal(t, 0, len(getTopologyResponse.Toplogy.Links))
// }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment