diff --git a/controller/northbound/server/topology.go b/controller/northbound/server/topology.go
index e922dc87794c38e80fba914ad04e7efacc151299..eb332419dad8be18da52c0bd84ade975f39770d5 100644
--- a/controller/northbound/server/topology.go
+++ b/controller/northbound/server/topology.go
@@ -36,7 +36,7 @@ func NewTopologyServer(
 }
 
 // AddLink adds a new link to the topology
-func (t Topology) AddLink(ctx context.Context, request *apb.AddLinkRequest) (*apb.AddLinkResponse, error) {
+func (t *Topology) AddLink(ctx context.Context, request *apb.AddLinkRequest) (*apb.AddLinkResponse, error) {
 	sourceNode, sourcePort, err := t.ensureNodeAndPortExists(request.Link.SourceNode, request.Link.SourcePort)
 	if err != nil {
 		return nil, status.Errorf(codes.Aborted, "%v", err)
@@ -67,7 +67,7 @@ func (t Topology) AddLink(ctx context.Context, request *apb.AddLinkRequest) (*ap
 }
 
 // GetTopology returns the current topology in the form of all links
-func (t Topology) GetTopology(ctx context.Context, request *apb.GetTopologyRequest) (*apb.GetTopologyResponse, error) {
+func (t *Topology) GetTopology(ctx context.Context, request *apb.GetTopologyRequest) (*apb.GetTopologyResponse, error) {
 	topo, err := t.topologyService.GetAll()
 	if err != nil {
 		return nil, status.Errorf(codes.Aborted, "%v", err)
@@ -103,7 +103,7 @@ func (t Topology) GetTopology(ctx context.Context, request *apb.GetTopologyReque
 	}, nil
 }
 
-func (t Topology) ensureNodeAndPortExists(incomingNode *apb.Node, incomingPort *apb.Port) (nodes.Node, ports.Port, error) {
+func (t *Topology) ensureNodeAndPortExists(incomingNode *apb.Node, incomingPort *apb.Port) (nodes.Node, ports.Port, error) {
 	node, err := t.nodeService.EnsureExists(
 		nodes.Node{
 			ID: getExistingOrCreateNewUUIDFromString(incomingNode.Id),
diff --git a/controller/northbound/server/topology_test.go b/controller/northbound/server/topology_test.go
index 00916e50994534309dfe112445af1e7d83a0925c..e9e8e5f9072ef6cceff3ed69db52db3633f56584 100644
--- a/controller/northbound/server/topology_test.go
+++ b/controller/northbound/server/topology_test.go
@@ -12,6 +12,7 @@ import (
 	"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"
+
 	"github.com/google/uuid"
 )
 
@@ -48,16 +49,21 @@ func getTestTopologyService() topology.Service {
 	return topologyService
 }
 
-func getTestTopologyServer() *Topology {
+func getTestTopologyServer(
+	t *testing.T,
+	nodesToAdd []nodes.Node,
+	portsToAdd []ports.Port,
+	linksToAdd []links.Link,
+) *Topology {
 	eventService := eventservice.NewMockEventService()
 
-	nodeStore := store.NewGenericStore[nodes.Node]()
+	nodeStore := getTestStoreWithNodes(t, nodesToAdd)
 	nodeService := nodes.NewNodeService(nodeStore, eventService)
 
-	portStore := store.NewGenericStore[ports.Port]()
+	portStore := getTestStoreWithPorts(t, portsToAdd)
 	portService := ports.NewPortService(portStore, eventService)
 
-	linkStore := store.NewGenericStore[links.Link]()
+	linkStore := getTestStoreWithLinks(t, linksToAdd)
 	topologyService := topology.NewTopologyService(linkStore, nodeService, portService, eventService)
 
 	s := NewTopologyServer(topologyService, nodeService, portService)
@@ -65,6 +71,84 @@ func getTestTopologyServer() *Topology {
 	return s
 }
 
+func getTestSourceNode() nodes.Node {
+	return nodes.Node{
+		ID:   uuid.MustParse("44fb4aa4-c53c-4cf9-a081-5aabc61c7610"),
+		Name: "Test-Source-Node",
+	}
+}
+
+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-Source-Port",
+	}
+}
+
+func getTestTargetPort() ports.Port {
+	return ports.Port{
+		ID:   uuid.MustParse("1fa479e7-d393-4d45-822d-485cc1f05fc2"),
+		Name: "Test-Target-Port",
+	}
+}
+
+func getTestLinkInternal() links.Link {
+	return links.Link{
+		ID:         uuid.MustParse("5eb474f1-428e-4503-ba68-dcf9bef53467"),
+		Name:       "Test-Link",
+		SourceNode: getTestSourceNode(),
+		TargetNode: getTestTargetNode(),
+		SourcePort: getTestSourcePort(),
+		TargetPort: getTestTargetPort(),
+	}
+}
+
+func getTestStoreWithLinks(t *testing.T, nodes []links.Link) topology.Store {
+	store := store.NewGenericStore[links.Link]()
+
+	for _, node := range nodes {
+		err := store.Add(node)
+		if err != nil {
+			t.Fatalf("failed to prepare test store while adding node: %v", err)
+		}
+	}
+
+	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 getTestLink() *apb.Link {
 	return &apb.Link{
 		Name: "test-link",
@@ -96,7 +180,11 @@ func TestNewTopologyServer(t *testing.T) {
 				nodeService: getTestNodeService(),
 				portService: getTestPortService(),
 			},
-			want: getTestTopologyServer(),
+			want: &Topology{
+				topologyService: getTestTopologyService(),
+				nodeService:     getTestNodeService(),
+				portService:     getTestPortService(),
+			},
 		},
 	}
 	for _, tt := range tests {
@@ -109,18 +197,29 @@ func TestNewTopologyServer(t *testing.T) {
 }
 
 func TestTopology_AddLink(t *testing.T) {
+	type fields struct {
+		ports []ports.Port
+		nodes []nodes.Node
+		links []links.Link
+	}
 	type args struct {
 		ctx     context.Context
 		request *apb.AddLinkRequest
 	}
 	tests := []struct {
 		name    string
+		fields  fields
 		args    args
 		want    *apb.AddLinkResponse
 		wantErr bool
 	}{
 		{
 			name: "should add a new link",
+			fields: fields{
+				ports: []ports.Port{},
+				nodes: []nodes.Node{},
+				links: []links.Link{},
+			},
 			args: args{
 				ctx: context.TODO(),
 				request: &apb.AddLinkRequest{
@@ -135,7 +234,7 @@ func TestTopology_AddLink(t *testing.T) {
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			tr := getTestTopologyServer()
+			tr := getTestTopologyServer(t, tt.fields.nodes, tt.fields.ports, tt.fields.links)
 			got, err := tr.AddLink(tt.args.ctx, tt.args.request)
 			if (err != nil) != tt.wantErr {
 				t.Errorf("Topology.AddLink() error = %v, wantErr %v", err, tt.wantErr)
@@ -150,10 +249,9 @@ func TestTopology_AddLink(t *testing.T) {
 
 func TestTopology_GetTopology(t *testing.T) {
 	type fields struct {
-		UnimplementedTopologyServiceServer apb.UnimplementedTopologyServiceServer
-		topologyService                    topology.Service
-		nodeService                        nodes.Service
-		portService                        ports.Service
+		ports []ports.Port
+		nodes []nodes.Node
+		links []links.Link
 	}
 	type args struct {
 		ctx     context.Context
@@ -166,88 +264,54 @@ func TestTopology_GetTopology(t *testing.T) {
 		want    *apb.GetTopologyResponse
 		wantErr bool
 	}{
-		// TODO: Add test cases.
+		{
+			name: "should add a new link",
+			fields: fields{
+				ports: []ports.Port{getTestSourcePort(), getTestTargetPort()},
+				nodes: []nodes.Node{getTestSourceNode(), getTestTargetNode()},
+				links: []links.Link{getTestLinkInternal()},
+			},
+			args: args{
+				ctx:     context.TODO(),
+				request: &apb.GetTopologyRequest{},
+			},
+			want: &apb.GetTopologyResponse{
+				Status: apb.Status_STATUS_OK,
+				Toplogy: &apb.Topology{
+					Links: []*apb.Link{
+						{
+							Id:   "5eb474f1-428e-4503-ba68-dcf9bef53467",
+							Name: "Test-Link",
+							SourceNode: &apb.Node{
+								Id: "44fb4aa4-c53c-4cf9-a081-5aabc61c7610", Name: "Test-Source-Node",
+							},
+							SourcePort: &apb.Port{
+								Id: "1fa479e7-d393-4d45-822d-485cc1f05fce",
+							},
+							TargetNode: &apb.Node{
+								Id: "44fb4aa4-c53c-4cf9-a081-5aabc61c7612", Name: "Test-Target-Node",
+							},
+							TargetPort: &apb.Port{
+								Id: "1fa479e7-d393-4d45-822d-485cc1f05fc2",
+							},
+						},
+					},
+				},
+			},
+			wantErr: false,
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			tr := Topology{
-				UnimplementedTopologyServiceServer: tt.fields.UnimplementedTopologyServiceServer,
-				topologyService:                    tt.fields.topologyService,
-				nodeService:                        tt.fields.nodeService,
-				portService:                        tt.fields.portService,
-			}
+			tr := getTestTopologyServer(t, tt.fields.nodes, tt.fields.ports, tt.fields.links)
 			got, err := tr.GetTopology(tt.args.ctx, tt.args.request)
 			if (err != nil) != tt.wantErr {
 				t.Errorf("Topology.GetTopology() error = %v, wantErr %v", err, tt.wantErr)
 				return
 			}
-			if !reflect.DeepEqual(got, tt.want) {
+			if !reflect.DeepEqual(got.Toplogy, tt.want.Toplogy) {
 				t.Errorf("Topology.GetTopology() = %v, want %v", got, tt.want)
 			}
 		})
 	}
 }
-
-func TestTopology_ensureNodeAndPortExists(t *testing.T) {
-	type fields struct {
-		UnimplementedTopologyServiceServer apb.UnimplementedTopologyServiceServer
-		topologyService                    topology.Service
-		nodeService                        nodes.Service
-		portService                        ports.Service
-	}
-	type args struct {
-		incomingNode *apb.Node
-		incomingPort *apb.Port
-	}
-	tests := []struct {
-		name    string
-		fields  fields
-		args    args
-		want    nodes.Node
-		want1   ports.Port
-		wantErr bool
-	}{
-		// TODO: Add test cases.
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			tr := Topology{
-				UnimplementedTopologyServiceServer: tt.fields.UnimplementedTopologyServiceServer,
-				topologyService:                    tt.fields.topologyService,
-				nodeService:                        tt.fields.nodeService,
-				portService:                        tt.fields.portService,
-			}
-			got, got1, err := tr.ensureNodeAndPortExists(tt.args.incomingNode, tt.args.incomingPort)
-			if (err != nil) != tt.wantErr {
-				t.Errorf("Topology.ensureNodeAndPortExists() error = %v, wantErr %v", err, tt.wantErr)
-				return
-			}
-			if !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("Topology.ensureNodeAndPortExists() got = %v, want %v", got, tt.want)
-			}
-			if !reflect.DeepEqual(got1, tt.want1) {
-				t.Errorf("Topology.ensureNodeAndPortExists() got1 = %v, want %v", got1, tt.want1)
-			}
-		})
-	}
-}
-
-func Test_getExistingOrCreateNewUUIDFromString(t *testing.T) {
-	type args struct {
-		id string
-	}
-	tests := []struct {
-		name string
-		args args
-		want uuid.UUID
-	}{
-		// TODO: Add test cases.
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			if got := getExistingOrCreateNewUUIDFromString(tt.args.id); !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("getExistingOrCreateNewUUIDFromString() = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}