Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
integration_test.go 2.92 KiB
package cmd

import (
	"code.fbi.h-da.de/cocsn/gosdn/cli"
	guuid "github.com/google/uuid"
	"github.com/spf13/viper"
	"os"
	"testing"
)

var testAddress = "141.100.70.171:6030"
var testApiEndpoint = "http://141.100.70.171:8080"
var testUsername = "admin"
var testPassword = "arista"

func testSetupIntegration() {
	a := os.Getenv("GOSDN_TEST_ENDPOINT")
	if a != "" {
		testAddress = a
	}
	api := os.Getenv("GOSDN_TEST_API_ENDPOINT")
	if api != "" {
		testApiEndpoint = api
	}
	u := os.Getenv("GOSDN_TEST_USER")
	if u != "" {
		testUsername = u
	}
	p := os.Getenv("GOSDN_TEST_PASSWORD")
	if p != "" {
		testPassword = p
	}
}

func TestMain(m *testing.M) {
	testSetupIntegration()
	os.Exit(m.Run())
}

func TestCliIntegration(t *testing.T) {
	if testing.Short() {
		t.Skip("skipping integration test")
	}
	tests := []struct {
		name    string
		wantErr bool
	}{
		{
			name:    "default",
			wantErr: false,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			defer viper.Reset()
			if err := cli.HttpGet(testApiEndpoint, "init"); (err != nil) != tt.wantErr {
				switch err.(type) {
				case viper.ConfigFileNotFoundError:
				default:
					t.Errorf("gosdn cli init error = %v, wantErr %v", err, tt.wantErr)
					return
				}
			}
			cliPnd = viper.GetString("CLI_PND")
			cliSbi = viper.GetString("CLI_SBI")

			if err := cli.HttpGet(
				testApiEndpoint,
				"addDevice",
				"address="+testAddress,
				"password="+testPassword,
				"username="+testUsername,
				"sbi="+cliSbi,
				"pnd="+cliPnd,
			); (err != nil) != tt.wantErr {
				t.Errorf("gosdn cli add-device error = %v, wantErr %v", err, tt.wantErr)
				return
			}
			did := viper.GetString("LAST_DEVICE_UUID")

			if err := cli.HttpGet(
				testApiEndpoint,
				"request",
				"uuid="+did,
				"sbi="+cliSbi,
				"pnd="+cliPnd,
				"path=/system/config/hostname",
			); (err != nil) != tt.wantErr {
				t.Errorf("gosdn cli request error = %v, wantErr %v", err, tt.wantErr)
				return
			}

			if err := cli.HttpGet(
				testApiEndpoint,
				"getDevice",
				"address="+testAddress,
				"uuid="+did,
				"sbi="+cliSbi,
				"pnd="+cliPnd,
			); (err != nil) != tt.wantErr {
				t.Errorf("gosdn cli get-device error = %v, wantErr %v", err, tt.wantErr)
				return
			}

			hostname := guuid.New().String()
			if err := cli.HttpGet(
				testApiEndpoint,
				"set",
				"address="+testAddress,
				"uuid="+did,
				"sbi="+cliSbi,
				"pnd="+cliPnd,
				"path=/system/config/hostname",
				"value="+hostname,
			); (err != nil) != tt.wantErr {
				t.Errorf("gosdn cli set error = %v, wantErr %v", err, tt.wantErr)
				return
			}

			resp, err := cli.Get(testAddress, testUsername, testPassword, "/system/config/hostname")
			if (err != nil) != tt.wantErr {
				t.Errorf("cli.Get() error = %v, wantErr %v", err, tt.wantErr)
				return
			}
			got := resp.Notification[0].Update[0].Val.GetStringVal()
			if got != hostname {
				t.Errorf("integration test failed = got: %v, want: %v", got, hostname)
			}
		})
	}
}