diff --git a/build/ci/.test.yml b/build/ci/.test.yml
index b367908d79ca91e3256794b5da49eb0b3806fd1b..6b7da35e85d0d87f15052ae658113be051308170 100644
--- a/build/ci/.test.yml
+++ b/build/ci/.test.yml
@@ -12,6 +12,7 @@ integration-test:
     - if: $CI_COMMIT_BRANCH == "integration-test"
       allow_failure: true
   script:
+    - sleep 1m
     - go test -race ./test/integration -v -coverprofile=coverage.out
 
 unit-test:
diff --git a/nucleus/controller.go b/nucleus/controller.go
index e8fb8413c499a85ae435c9c65a6c9474cf9f0cf5..4e96a290b394a596dd2568b73305f1f7a27f7dc8 100644
--- a/nucleus/controller.go
+++ b/nucleus/controller.go
@@ -47,7 +47,8 @@ func initialize() error {
 	}
 
 	// TODO: Start grpc listener here
-
+	coreLock.Lock()
+	defer coreLock.Unlock()
 	return httpAPI()
 }
 
@@ -76,11 +77,9 @@ func createPrincipalNetworkDomain(sbi SouthboundInterface) error {
 // Run calls initialize to start the controller
 func Run(ctx context.Context) error {
 	var initError error
-	coreLock.Lock()
 	coreOnce.Do(func() {
 		initError = initialize()
 	})
-	coreLock.Unlock()
 	if initError != nil {
 		log.WithFields(log.Fields{}).Error(initError)
 		return initError
@@ -100,5 +99,7 @@ func Run(ctx context.Context) error {
 
 func shutdown() error {
 	log.Info("shutting down controller")
+	coreLock.Lock()
+	defer coreLock.Unlock()
 	return stopHttpServer()
 }
diff --git a/nucleus/http_test.go b/nucleus/http_test.go
index 35ce78254d7ddd76f322f136988c460c913d9128..d6ad288f137da1db2eee074345f6d3a8d39a7f56 100644
--- a/nucleus/http_test.go
+++ b/nucleus/http_test.go
@@ -137,10 +137,12 @@ func Test_httpApi(t *testing.T) {
 			wantErr: false,
 		},
 	}
+	coreLock.Lock()
 	if err := httpAPI(); err != nil {
 		t.Errorf("httpApi() error = %v", err)
 		return
 	}
+	coreLock.Unlock()
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 			got, err := http.Get(tt.request)