aboutsummaryrefslogtreecommitdiffstats
path: root/src/k8splugin/plugins/network/plugin_test.go
diff options
context:
space:
mode:
authorRitu Sood <ritu.sood@intel.com>2018-11-10 03:54:15 +0000
committerVictor Morales <victor.morales@intel.com>2018-12-05 16:26:56 -0800
commita1abd829315d72adb258da20470eaa2445cf3e32 (patch)
treea1c2ae3e61490241b0a4c93f49acffd6d319a7a4 /src/k8splugin/plugins/network/plugin_test.go
parentdaf3a00798ee77e469cd89cb16ade818c50968f9 (diff)
Add Network and OVN4NFV Plugins
This patch includes support for Network Objects through a new plugin. It also add the first sub-module plugin for OVN4NFVK8s support. Change-Id: Ia23c42d50f75a5206e1b6a04052c34e940518428 Signed-off-by: Ritu Sood <ritu.sood@intel.com> Signed-off-by: Victor Morales <victor.morales@intel.com> Issue-ID: MULTICLOUD-303
Diffstat (limited to 'src/k8splugin/plugins/network/plugin_test.go')
-rw-r--r--src/k8splugin/plugins/network/plugin_test.go172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/k8splugin/plugins/network/plugin_test.go b/src/k8splugin/plugins/network/plugin_test.go
new file mode 100644
index 00000000..325de31f
--- /dev/null
+++ b/src/k8splugin/plugins/network/plugin_test.go
@@ -0,0 +1,172 @@
+// +build integration
+
+/*
+Copyright 2018 Intel Corporation.
+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 main
+
+import (
+ pkgerrors "github.com/pkg/errors"
+ "k8splugin/krd"
+ "os"
+ "plugin"
+ "reflect"
+ "strings"
+ "testing"
+)
+
+func LoadMockNetworkPlugins(krdLoadedPlugins *map[string]*plugin.Plugin, networkName, errMsg string) error {
+ if _, err := os.Stat("../../mock_files/mock_plugins/mocknetworkplugin.so"); os.IsNotExist(err) {
+ return pkgerrors.New("mocknetworkplugin.so does not exist. Please compile mocknetworkplugin.go to generate")
+ }
+
+ mockNetworkPlugin, err := plugin.Open("../../mock_files/mock_plugins/mocknetworkplugin.so")
+ if err != nil {
+ return pkgerrors.Cause(err)
+ }
+
+ symErrVar, err := mockNetworkPlugin.Lookup("Err")
+ if err != nil {
+ return err
+ }
+ symNetworkNameVar, err := mockNetworkPlugin.Lookup("NetworkName")
+ if err != nil {
+ return err
+ }
+
+ *symErrVar.(*string) = errMsg
+ *symNetworkNameVar.(*string) = networkName
+ (*krdLoadedPlugins)["ovn4nfvk8s-network"] = mockNetworkPlugin
+
+ return nil
+}
+
+func TestCreateNetwork(t *testing.T) {
+ internalVNFID := "1"
+ oldkrdPluginData := krd.LoadedPlugins
+
+ defer func() {
+ krd.LoadedPlugins = oldkrdPluginData
+ }()
+
+ testCases := []struct {
+ label string
+ input *krd.ResourceData
+ mockError string
+ mockOutput string
+ expectedResult string
+ expectedError string
+ }{
+ {
+ label: "Fail to decode a network object",
+ input: &krd.ResourceData{
+ YamlFilePath: "../../mock_files/mock_yamls/service.yaml",
+ },
+ expectedError: "Fail to decode network's configuration: Invalid configuration value",
+ },
+ {
+ label: "Fail to create a network",
+ input: &krd.ResourceData{
+ YamlFilePath: "../../mock_files/mock_yamls/ovn4nfvk8s.yaml",
+ },
+ mockError: "Internal error",
+ expectedError: "Error during the creation for ovn4nfvk8s plugin: Internal error",
+ },
+ {
+ label: "Successfully create a ovn4nfv network",
+ input: &krd.ResourceData{
+ VnfId: internalVNFID,
+ YamlFilePath: "../../mock_files/mock_yamls/ovn4nfvk8s.yaml",
+ },
+ expectedResult: internalVNFID + "_ovn4nfvk8s_myNetwork",
+ mockOutput: "myNetwork",
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.label, func(t *testing.T) {
+ err := LoadMockNetworkPlugins(&krd.LoadedPlugins, testCase.mockOutput, testCase.mockError)
+ if err != nil {
+ t.Fatalf("TestCreateNetwork returned an error (%s)", err)
+ }
+ result, err := Create(testCase.input, nil)
+ if err != nil {
+ if testCase.expectedError == "" {
+ t.Fatalf("Create method return an un-expected (%s)", err)
+ }
+ if !strings.Contains(string(err.Error()), testCase.expectedError) {
+ t.Fatalf("Create method returned an error (%s)", err)
+ }
+ } else {
+ if testCase.expectedError != "" && testCase.expectedResult == "" {
+ t.Fatalf("Create method was expecting \"%s\" error message", testCase.expectedError)
+ }
+ if !reflect.DeepEqual(testCase.expectedResult, result) {
+
+ t.Fatalf("Create method returned: \n%v\n and it was expected: \n%v", result, testCase.expectedResult)
+ }
+ }
+ })
+ }
+}
+
+func TestDeleteNetwork(t *testing.T) {
+ oldkrdPluginData := krd.LoadedPlugins
+
+ defer func() {
+ krd.LoadedPlugins = oldkrdPluginData
+ }()
+
+ testCases := []struct {
+ label string
+ input string
+ mockError string
+ mockOutput string
+ expectedResult string
+ expectedError string
+ }{
+ {
+ label: "Fail to load non-existing plugin",
+ input: "test",
+ expectedError: "No plugin for resource",
+ },
+ {
+ label: "Fail to delete a network",
+ input: "1_ovn4nfvk8s_test",
+ mockError: "Internal error",
+ expectedError: "Error during the deletion for ovn4nfvk8s plugin: Internal error",
+ },
+ {
+ label: "Successfully delete a ovn4nfv network",
+ input: "1_ovn4nfvk8s_test",
+ },
+ }
+
+ for _, testCase := range testCases {
+ t.Run(testCase.label, func(t *testing.T) {
+ err := LoadMockNetworkPlugins(&krd.LoadedPlugins, testCase.mockOutput, testCase.mockError)
+ if err != nil {
+ t.Fatalf("TestDeleteNetwork returned an error (%s)", err)
+ }
+ err = Delete(testCase.input, "", nil)
+ if err != nil {
+ if testCase.expectedError == "" {
+ t.Fatalf("Create method return an un-expected (%s)", err)
+ }
+ if !strings.Contains(string(err.Error()), testCase.expectedError) {
+ t.Fatalf("Create method returned an error (%s)", err)
+ }
+ }
+ })
+ }
+}