Skip to content
Snippets Groups Projects
topology_test.go 5.94 KiB
Newer Older
  • Learn to ignore specific revisions
  • package integration_test_topology
    
    import (
    	"context"
    	"fmt"
    	"testing"
    
    	topologyPb "code.fbi.h-da.de/danet/gosdn/api/go/gosdn/topology"
    	integration_test_utils "code.fbi.h-da.de/danet/gosdn/integration-tests/integrationTestUtils"
    	"github.com/stretchr/testify/assert"
    	"google.golang.org/grpc"
    )
    
    // The connection to the controller to use in each test.
    var conn *grpc.ClientConn
    
    // The context containing the credentials when authenticated.
    var ctx context.Context
    
    // A defaultSDN config with default/empty values.
    var defaultSDNConfig string
    
    func TestMain(m *testing.M) {
    	localConn, localCtx, err := integration_test_utils.CreateSecureConnection()
    	//localConn, localCtx, err := integration_test_utils.CreateConnection()
    	if err != nil {
    		fmt.Println(err.Error())
    	}
    	conn = localConn
    	ctx = localCtx
    
    	sndConfig, err := integration_test_utils.ExportCurrentSDNConfig(conn, ctx)
    	defaultSDNConfig = sndConfig
    	if err != nil {
    		fmt.Println(err.Error())
    	}
    	m.Run()
    }
    
    func TestCreateTopologyAndGetIt(t *testing.T) {
    	defer integration_test_utils.ApplySDNConfig(conn, ctx, defaultSDNConfig)
    
    	addLinkRequest := topologyPb.AddLinkRequest{
    		Link: &topologyPb.Link{
    			Name:       "Link1",
    			SourceNode: &topologyPb.Node{Name: "Node1"},
    			TargetNode: &topologyPb.Node{Name: "Node2"},
    			SourcePort: &topologyPb.Port{Name: "Port1",
    				Configuration: &topologyPb.Configuration{
    					Ip:           "10.0.0.1",
    					PrefixLength: 24}},
    			TargetPort: &topologyPb.Port{Name: "Port2",
    				Configuration: &topologyPb.Configuration{
    					Ip:           "10.0.0.2",
    					PrefixLength: 24}}},
    	}
    
    	topologyService := topologyPb.NewTopologyServiceClient(conn)
    	_, err := topologyService.AddLink(ctx, &addLinkRequest)
    	if err != nil {
    		t.Errorf("Error while adding link: %v", err)
    	}
    
    	getTopolgyResponse, err := topologyService.GetTopology(ctx, &topologyPb.GetTopologyRequest{})
    	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, "Node1", getTopolgyResponse.Toplogy.Links[0].SourceNode.Name)
    	assert.Equal(t, "Node2", getTopolgyResponse.Toplogy.Links[0].TargetNode.Name)
    	assert.Equal(t, "Port1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Name)
    	assert.Equal(t, "10.0.0.1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.Ip)
    	assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.PrefixLength)
    	assert.Equal(t, "Port2", getTopolgyResponse.Toplogy.Links[0].TargetPort.Name)
    	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)
    }
    
    
    Malte Bauch's avatar
    Malte Bauch committed
    func TestCreateTopologyFailsValidation(t *testing.T) {
    	defer integration_test_utils.ApplySDNConfig(conn, ctx, defaultSDNConfig)
    
    	addLinkRequest := topologyPb.AddLinkRequest{
    		Link: &topologyPb.Link{
    			Name:       "Link1",
    			SourceNode: &topologyPb.Node{Name: "Node1"},
    			TargetNode: &topologyPb.Node{Name: "Node2"},
    			SourcePort: &topologyPb.Port{Name: "Port1"},
    			TargetPort: &topologyPb.Port{Name: "Port2"}},
    	}
    
    	topologyService := topologyPb.NewTopologyServiceClient(conn)
    	resp, 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.")
    }
    
    
    // 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.
    
    Malte Bauch's avatar
    Malte Bauch committed
    func TestCreateThenDeleteTopologyAndGetEmptyTopologies(t *testing.T) {
    	defer integration_test_utils.ApplySDNConfig(conn, ctx, defaultSDNConfig)
    
    	addLinkRequest := topologyPb.AddLinkRequest{
    		Link: &topologyPb.Link{
    			Id:         "8a01b8b0-6244-42bf-b72a-3821efc1a353",
    			Name:       "Link1",
    			SourceNode: &topologyPb.Node{Name: "Node1"},
    			TargetNode: &topologyPb.Node{Name: "Node2"},
    			SourcePort: &topologyPb.Port{Name: "Port1",
    				Configuration: &topologyPb.Configuration{
    					Ip:           "10.0.0.1",
    					PrefixLength: 24}},
    			TargetPort: &topologyPb.Port{Name: "Port2",
    				Configuration: &topologyPb.Configuration{
    					Ip:           "10.0.0.2",
    					PrefixLength: 24}}},
    	}
    
    	topologyService := topologyPb.NewTopologyServiceClient(conn)
    	_, err := topologyService.AddLink(ctx, &addLinkRequest)
    	if err != nil {
    		t.Errorf("Error while adding link: %v", err)
    	}
    
    	getTopolgyResponse, err := topologyService.GetTopology(ctx, &topologyPb.GetTopologyRequest{})
    	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, "Node1", getTopolgyResponse.Toplogy.Links[0].SourceNode.Name)
    	assert.Equal(t, "Node2", getTopolgyResponse.Toplogy.Links[0].TargetNode.Name)
    	assert.Equal(t, "Port1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Name)
    	assert.Equal(t, "10.0.0.1", getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.Ip)
    	assert.Equal(t, int64(24), getTopolgyResponse.Toplogy.Links[0].SourcePort.Configuration.PrefixLength)
    	assert.Equal(t, "Port2", getTopolgyResponse.Toplogy.Links[0].TargetPort.Name)
    	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)
    	if err != nil {
    		t.Errorf("Error while deleting link: %v", err)
    	}
    	getTopologyRequest := &topologyPb.GetTopologyRequest{}
    	getTopologyResponse, err := topologyService.GetTopology(ctx, getTopologyRequest)
    	if err != nil {
    		t.Errorf("Error while getting topologies: %v", err)
    	}
    
    	assert.Equal(t, 0, len(getTopologyResponse.Toplogy.Links))
    }