Initial commit
[ric-plt/o1.git] / agent / pkg / nbi / nbi_test.go
diff --git a/agent/pkg/nbi/nbi_test.go b/agent/pkg/nbi/nbi_test.go
new file mode 100755 (executable)
index 0000000..8a1acd2
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+==================================================================================
+  Copyright (c) 2019 AT&T Intellectual Property.
+  Copyright (c) 2019 Nokia
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================================
+*/
+
+package nbi
+
+import (
+       "os"    
+       "time"
+       "encoding/json"
+       "testing"
+       "net"
+    "net/http"
+    "net/http/httptest"
+       "github.com/stretchr/testify/assert"
+
+       apimodel "gerrit.oran-osc.org/r/ric-plt/o1mediator/pkg/appmgrmodel"
+       "gerrit.oran-osc.org/r/ric-plt/o1mediator/pkg/sbi"
+       
+)
+
+var XappConfig = `{
+       "o-ran-sc-ric-ueec-config-v1:ric": {
+         "config": {
+               "name": "ueec",
+               "namespace": "ricxapp",
+               "control": {
+                 "active": true,
+                 "interfaceId": {
+                       "globalENBId": {
+                         "plmnId": "1234",
+                         "eNBId": "55"
+                       }
+                 }
+               }
+         }
+       }
+  }`
+
+var XappDescriptor = `{
+       "o-ran-sc-ric-xapp-desc-v1:ric": {
+         "xapps": {
+               "xapp": [
+                 {
+                       "name": "ueec",
+                       "release-name": "ueec-xapp",
+                       "version": "0.0.1",
+                       "namespace": "ricxapp"
+                 }
+               ]
+         }
+       }
+  }`
+
+var n *Nbi
+
+// Test cases
+func TestMain(M *testing.M) {
+       n = NewNbi(sbi.NewSBIClient("localhost:8080", "/ric/v1/", []string{"http"}, 5))
+       go n.Start()
+       time.Sleep(time.Duration(1) * time.Second)
+
+       os.Exit(M.Run())
+}
+
+func TestModifyConfigmap(t *testing.T) {
+       ts := CreateHTTPServer(t, "PUT", "/ric/v1/config", http.StatusOK, apimodel.ConfigValidationErrors{})
+       defer ts.Close()
+
+       var f interface{}
+       err := json.Unmarshal([]byte(XappConfig), &f)
+       assert.Equal(t, true, err == nil)
+
+       err = n.ManageConfigmaps("o-ran-sc-ric-ueec-config-v1", XappConfig, 1)
+       assert.Equal(t, true, err == nil)
+}
+
+func TestDeployXApp(t *testing.T) {
+       ts := CreateHTTPServer(t, "POST", "/ric/v1/xapps", http.StatusCreated, apimodel.Xapp{})
+       defer ts.Close()
+
+       var f interface{}
+       err := json.Unmarshal([]byte(XappDescriptor), &f)
+       assert.Equal(t, true, err == nil)
+
+       err = n.ManageXapps("o-ran-sc-ric-xapp-desc-v1", XappDescriptor, 0)
+       assert.Equal(t, true, err == nil)
+}
+
+func TestUnDeployXApp(t *testing.T) {
+       ts := CreateHTTPServer(t, "DELETE", "/ric/v1/xapps/ueec-xapp", http.StatusNoContent, apimodel.Xapp{})
+       defer ts.Close()
+
+       var f interface{}
+       err := json.Unmarshal([]byte(XappDescriptor), &f)
+       assert.Equal(t, true, err == nil)
+
+       err = n.ManageXapps("o-ran-sc-ric-xapp-desc-v1", XappDescriptor, 2)
+       assert.Equal(t, true, err == nil)
+}
+
+func TestGetDeployedXapps(t *testing.T) {
+       ts := CreateHTTPServer(t, "GET", "/ric/v1/xapps", http.StatusOK, apimodel.AllDeployedXapps{})
+       defer ts.Close()
+
+       err := sbiClient.GetDeployedXapps()
+       assert.Equal(t, true, err == nil)
+}
+
+func TestErrorCases(t *testing.T) {
+       // Invalid config
+       err := n.ManageXapps("o-ran-sc-ric-xapp-desc-v1", "", 2)
+       assert.Equal(t, true, err == nil)
+
+       // Invalid module
+       err = n.ManageXapps("", "{}", 2)
+       assert.Equal(t, true, err == nil)
+
+       // Unexpected module
+       err = n.ManageXapps("o-ran-sc-ric-ueec-config-v1", "{}", 2)
+       assert.Equal(t, true, err == nil)
+
+       // Invalid operation
+       err = n.ManageXapps("o-ran-sc-ric-ueec-config-v1", XappDescriptor, 1)
+       assert.Equal(t, true, err == nil)
+
+       // Invalid config
+       err = n.ManageConfigmaps("o-ran-sc-ric-ueec-config-v1", "", 1)
+       assert.Equal(t, true, err == nil)
+
+       // Invalid module
+       err = n.ManageConfigmaps("", "{}", 1)
+       assert.Equal(t, true, err == nil)
+
+       // Unexpected module
+       err = n.ManageConfigmaps("o-ran-sc-ric-xapp-desc-v1", "{}", 0)
+       assert.Equal(t, true, err == nil)
+
+       // Invalid operation
+       err = n.ManageConfigmaps("o-ran-sc-ric-ueec-config-v1", "{}", 0)
+       assert.Equal(t, true, err != nil)
+}
+
+func TestTeardown(t *testing.T) {
+       n.Stop()
+}
+
+func CreateHTTPServer(t *testing.T, method, url string, status int, respData interface{}) *httptest.Server {
+       l, err := net.Listen("tcp", "localhost:8080")
+       if err != nil {
+                       t.Error("Failed to create listener: " + err.Error())
+       }
+       ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+               assert.Equal(t, r.Method, method)
+               assert.Equal(t, r.URL.String(), url)
+               w.Header().Add("Content-Type", "application/json")
+               w.WriteHeader(status)
+               b, _ := json.Marshal(respData)
+               w.Write(b)
+       }))
+       ts.Listener.Close()
+       ts.Listener = l
+
+       ts.Start()
+
+       return ts
+}
+
+func DescMatcher(result, expected *apimodel.XappDescriptor) bool {
+       if *result.XappName == *expected.XappName && result.HelmVersion == expected.HelmVersion &&
+               result.Namespace == expected.Namespace && result.ReleaseName == expected.ReleaseName {
+               return true
+       }
+       return false
+}
+
+func ConfigMatcher(result, expected *apimodel.XAppConfig) bool {
+       if *result.Metadata.XappName == *expected.Metadata.XappName &&
+          *result.Metadata.Namespace == *expected.Metadata.Namespace {
+               return true
+       }
+       return false
+}