From 6ab9121c66e365d3af03521ab61d9071ea0f87fb Mon Sep 17 00:00:00 2001 From: Neil-Jocelyn Schark <neil-jocelyn.schark@stud.h-da.de> Date: Fri, 11 Jun 2021 09:16:40 +0000 Subject: [PATCH] Resolve "Improve test environment to use seperate ceos instance for each pipeline" --- build/ci/.golangci-config/.golangci.yml | 2 +- build/ci/.terraform-ci.yml | 4 +++- build/ci/.test.yml | 4 ++++ build/ci/generate_port.sh | 14 ++++++++++++++ build/ci/generate_port2.sh | 14 ++++++++++++++ test/integration/cmdIntegration_test.go | 25 +++++++++++++++++-------- test/terraform/containers.tf | 6 +++++- test/terraform/main.tf | 1 + test/terraform/networks.tf | 15 --------------- test/terraform/resources.tf | 2 +- 10 files changed, 60 insertions(+), 27 deletions(-) create mode 100755 build/ci/generate_port.sh create mode 100755 build/ci/generate_port2.sh delete mode 100644 test/terraform/networks.tf diff --git a/build/ci/.golangci-config/.golangci.yml b/build/ci/.golangci-config/.golangci.yml index 8238d1430..3492086f6 100644 --- a/build/ci/.golangci-config/.golangci.yml +++ b/build/ci/.golangci-config/.golangci.yml @@ -33,4 +33,4 @@ linters: issues: exclude-use-default: false max-issues-per-linter: 0 - max-same-issues: 0 \ No newline at end of file + max-same-issues: 0 diff --git a/build/ci/.terraform-ci.yml b/build/ci/.terraform-ci.yml index 6049f9d3f..e8377f940 100644 --- a/build/ci/.terraform-ci.yml +++ b/build/ci/.terraform-ci.yml @@ -4,7 +4,7 @@ variables: TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/integration cache: - key: integration + key: ${CI_PIPELINE_ID} paths: - ${TF_ROOT}/.terraform @@ -13,6 +13,7 @@ cache: variables: CI_DEBUG_TRACE: "false" before_script: + - ./build/ci/generate_port2.sh $CI_PIPELINE_ID >> ${TF_ROOT}/port - cd ${TF_ROOT} - export TF_VAR_integration_username=terraform - export TF_VAR_integration_access_token=${TERRAFORM_API_TOKEN} @@ -20,6 +21,7 @@ cache: - export TF_VAR_tls_key=${DOCKER_TLS_KEY} - export TF_VAR_tls_cert=${DOCKER_TLS_CERT} - export TF_VAR_tls_ca_cert=${DOCKER_TLS_CA} + rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'develop') variables: diff --git a/build/ci/.test.yml b/build/ci/.test.yml index e4209b3bb..461480c31 100644 --- a/build/ci/.test.yml +++ b/build/ci/.test.yml @@ -7,6 +7,8 @@ integration-test: variables: GOSDN_LOG: "nolog" GOSDN_TEST_API_ENDPOINT: http://gosdn-$CI_COMMIT_SHA.apps.ocp.fbi.h-da.de/api + GOSDN_TEST_ENDPOINT_IP: 141.100.70.171 + GOSDN_CHANGE_TIMEOUT: "100ms" rules: - if: $CI_NIGHTLY when: delayed @@ -19,6 +21,8 @@ integration-test: when: delayed start_in: 2 minutes script: + - ./build/ci/generate_port.sh $CI_PIPELINE_ID >> port + - export GOSDN_TEST_ENDPOINT_PORT=$(cat port) - go test -race ./test/integration -v -coverprofile=coverage.out .test: &test diff --git a/build/ci/generate_port.sh b/build/ci/generate_port.sh new file mode 100755 index 000000000..941a12843 --- /dev/null +++ b/build/ci/generate_port.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +input=$1 +#trailing_backspace=$2 + +hashed_value=$(echo $input | sha256sum | awk '{print $1}' ) + +decimal_value=$((16#$hashed_value)) +decimal_value=${decimal_value/-/} + +port=$(((decimal_value % 10000)+50000)) + +#echo -n $(($port*1)) +echo -n $port \ No newline at end of file diff --git a/build/ci/generate_port2.sh b/build/ci/generate_port2.sh new file mode 100755 index 000000000..f8e1ca304 --- /dev/null +++ b/build/ci/generate_port2.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +input=$1 +#trailing_backspace=$2 + +hashed_value=$(echo $input | sha256sum | awk '{print $1}' ) + +decimal_value=$((16#$hashed_value)) +decimal_value=${decimal_value/-/} + +port=$(((decimal_value % 10000)+50000)) + +#echo -n $(($port*1)) +echo -n $port \ No newline at end of file diff --git a/test/integration/cmdIntegration_test.go b/test/integration/cmdIntegration_test.go index ae3d20904..59a302901 100644 --- a/test/integration/cmdIntegration_test.go +++ b/test/integration/cmdIntegration_test.go @@ -1,24 +1,25 @@ package integration import ( - "os" - "testing" - tpb "code.fbi.h-da.de/cocsn/api/go/gosdn/transport" - "code.fbi.h-da.de/cocsn/gosdn/api" "code.fbi.h-da.de/cocsn/gosdn/nucleus/util/proto" + "fmt" guuid "github.com/google/uuid" gpb "github.com/openconfig/gnmi/proto/gnmi" log "github.com/sirupsen/logrus" "github.com/spf13/viper" pb "google.golang.org/protobuf/proto" + "os" + "testing" ) const unreachable = "203.0.113.10:6030" const testPath = "/system/config/hostname" -var testAddress = "141.100.70.171:6030" +var testIP = "141.100.70.171" +var testPort = "6030" +var testAddress = testIP + ":" + testPort var testAPIEndpoint = "http://gosdn-latest.apps.ocp.fbi.h-da.de/api" var testUsername = "admin" var testPassword = "arista" @@ -34,11 +35,19 @@ func testSetupIntegration() { log.SetLevel(log.PanicLevel) } - a := os.Getenv("GOSDN_TEST_ENDPOINT") + a := os.Getenv("GOSDN_TEST_ENDPOINT_IP") if a != "" { - testAddress = a - log.Infof("GOSDN_TEST_ENDPOINT set to %v", testAddress) + testIP = a + log.Infof("GOSDN_TEST_ENDPOINT_IP set to %v", testIP) } + port := os.Getenv("GOSDN_TEST_ENDPOINT_PORT") + if port != "" { + testPort = port + log.Infof("GOSDN_TEST_ENDPOINT_PORT set to %v", testPort) + } + testAddress = testIP + ":" + testPort + fmt.Printf("Testadress: %s, Testport: %s, Port: %s", testAddress, testPort, port) + api := os.Getenv("GOSDN_TEST_API_ENDPOINT") if api != "" { testAPIEndpoint = api diff --git a/test/terraform/containers.tf b/test/terraform/containers.tf index 414932231..8f26aab32 100644 --- a/test/terraform/containers.tf +++ b/test/terraform/containers.tf @@ -15,6 +15,10 @@ resource "docker_container" "gosdn" { } } +data "local_file" "port" { + filename = "port" +} + # create arista container # namespace is french cheeses resource "docker_container" "ceos" { @@ -24,7 +28,7 @@ resource "docker_container" "ceos" { ports { internal = 6030 - external = 6030 + external = data.local_file.port.content } networks_advanced { diff --git a/test/terraform/main.tf b/test/terraform/main.tf index 1f2287663..a08c19bb6 100644 --- a/test/terraform/main.tf +++ b/test/terraform/main.tf @@ -1,6 +1,7 @@ terraform { backend "http" { } + required_providers { docker = { source = "kreuzwerker/docker" diff --git a/test/terraform/networks.tf b/test/terraform/networks.tf deleted file mode 100644 index 2372a310a..000000000 --- a/test/terraform/networks.tf +++ /dev/null @@ -1,15 +0,0 @@ -resource "docker_network" "danet_legacy" { - name = "legacy-${random_id.server.hex}" - - ipam_config { - subnet = "172.100.100.0/24" - } -} - -resource "docker_network" "danet" { - name = "danet-${random_id.server.hex}" - ipv6 = true - ipam_config { - subnet = "fdfe::/64" - } -} \ No newline at end of file diff --git a/test/terraform/resources.tf b/test/terraform/resources.tf index 9659f2d94..d5f2938f3 100644 --- a/test/terraform/resources.tf +++ b/test/terraform/resources.tf @@ -1,3 +1,3 @@ resource "random_id" "server" { byte_length = 8 -} +} \ No newline at end of file -- GitLab