From 6dd43834fa997642015994143e368396c26c7ff0 Mon Sep 17 00:00:00 2001
From: Manuel Kieweg <manuel.kieweg@h-da.de>
Date: Tue, 15 Jun 2021 16:19:27 +0000
Subject: [PATCH] Resolve "Access to scrambled ports not working"

---
 api/apiIntegration_test.go                    | 14 +++++-----
 build/ci/.build-container.yml                 |  8 +++---
 build/ci/.terraform-ci.yml                    |  8 +++---
 build/ci/.test.yml                            | 10 ++++---
 .../{generate_port.sh => generate_octet.bash} |  5 ++--
 .../{generate_port2.sh => generate_octet.sh}  |  5 ++--
 test/integration/nucleusIntegration_test.go   | 27 ++++---------------
 test/terraform/containers.tf                  | 20 +++-----------
 test/terraform/variables.tf                   |  8 ++++++
 9 files changed, 43 insertions(+), 62 deletions(-)
 rename build/ci/{generate_port.sh => generate_octet.bash} (70%)
 rename build/ci/{generate_port2.sh => generate_octet.sh} (70%)

diff --git a/api/apiIntegration_test.go b/api/apiIntegration_test.go
index 467a20786..260578367 100644
--- a/api/apiIntegration_test.go
+++ b/api/apiIntegration_test.go
@@ -16,7 +16,7 @@ import (
 const unreachable = "203.0.113.10:6030"
 const testPath = "/system/config/hostname"
 
-var testAddress = testIP + ":" + testPort
+var testAddress = "141.100.70.170:6030"
 var testAPIEndpoint = "gosdn-latest.apps.ocp.fbi.h-da.de"
 var testUsername = "admin"
 var testPassword = "arista"
@@ -29,16 +29,16 @@ func TestMain(m *testing.M) {
 }
 
 func testSetupIntegration() {
-	viper.SetConfigFile(".k8s.toml")
-	if err := viper.ReadInConfig(); err != nil {
-		log.Error(err)
-	}
-
 	if os.Getenv("GOSDN_LOG") == "nolog" {
 		log.SetLevel(log.PanicLevel)
 	}
 
-	api := viper.GetString("GOSDN_TEST_API_ENDPOINT")
+	addr := os.Getenv("GOSDN_TEST_ENDPOINT")
+	if addr != "" {
+		testAddress = addr
+		log.Infof("GOSDN_TEST_ENDPOINT set to %v", testAddress)
+	}
+	api := os.Getenv("GOSDN_TEST_API_ENDPOINT")
 	if api != "" {
 		testAPIEndpoint = api
 		log.Infof("GOSDN_TEST_API_ENDPOINT set to %v", testAPIEndpoint)
diff --git a/build/ci/.build-container.yml b/build/ci/.build-container.yml
index 203544342..c02be9f27 100644
--- a/build/ci/.build-container.yml
+++ b/build/ci/.build-container.yml
@@ -1,8 +1,4 @@
 
-services:
-  - name: docker:19.03.12-dind
-    command: ["--registry-mirror", "http://141.100.70.170:6000"]
-
 variables:
   DOCKER_TLS_CERTDIR: "/certs"
   DOCKER_IMAGE_SHA: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
@@ -11,6 +7,10 @@ variables:
   before_script:
     - echo "override global before script"
   image: docker:19.03.12
+  services:
+  - name: docker:19.03.12-dind
+    command: ["--registry-mirror", "http://141.100.70.170:6000", "--dns", "1.1.1.1"]
+
   stage: build
   tags:
     - dind
diff --git a/build/ci/.terraform-ci.yml b/build/ci/.terraform-ci.yml
index e8377f940..0177f1cab 100644
--- a/build/ci/.terraform-ci.yml
+++ b/build/ci/.terraform-ci.yml
@@ -1,7 +1,7 @@
 
 variables:
   TF_ROOT: ${CI_PROJECT_DIR}/test/terraform
-  TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/integration
+  TF_ADDRESS: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/terraform/state/${CI_PIPELINE_ID}
 
 cache:
   key: ${CI_PIPELINE_ID}
@@ -13,7 +13,8 @@ cache:
   variables:
     CI_DEBUG_TRACE: "false"
   before_script:
-    - ./build/ci/generate_port2.sh $CI_PIPELINE_ID >> ${TF_ROOT}/port
+    - ./build/ci/generate_octet.sh $CI_COMMIT_SHA >> ${TF_ROOT}/firstOctet
+    - ./build/ci/generate_octet.sh $CI_PIPELINE_ID >> ${TF_ROOT}/secondOctet
     - cd ${TF_ROOT}
     - export TF_VAR_integration_username=terraform
     - export TF_VAR_integration_access_token=${TERRAFORM_API_TOKEN}
@@ -21,7 +22,8 @@ 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}
-
+    - export TF_VAR_ceos_address=172.24.$(cat firstOctet).$(cat secondOctet)
+    - export TF_VAR_gosdn_address=172.24.$(cat secondOctet).$(cat firstOctet)
   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 d5df26647..712efe07f 100644
--- a/build/ci/.test.yml
+++ b/build/ci/.test.yml
@@ -7,8 +7,6 @@
 
   variables:
     GOSDN_LOG: "nolog"
-    GOSDN_TEST_API_ENDPOINT: gosdn-$CI_COMMIT_SHA.apps.ocp.fbi.h-da.de
-    GOSDN_TEST_ENDPOINT_IP: 141.100.70.171
     GOSDN_CHANGE_TIMEOUT: "100ms"
   rules:
     - if: $CI_NIGHTLY
@@ -25,8 +23,9 @@
 integration-test:nucleus:
   <<: *integration-test
   script:
-    - ./build/ci/generate_port.sh $CI_PIPELINE_ID >> port
-    - export GOSDN_TEST_ENDPOINT_PORT=$(cat port)
+    - ./build/ci/generate_octet.bash $CI_COMMIT_SHA >> firstOctet
+    - ./build/ci/generate_octet.bash $CI_PIPELINE_ID >> secondOctet
+    - export GOSDN_TEST_ENDPOINT=172.24.$(cat firstOctet).$(cat secondOctet):6030
     - cd ./test/integration
     - go test -race -v -run TestGnmi_SetIntegration
     - go test -race -v -run TestGnmi_GetIntegration
@@ -44,6 +43,9 @@ integration-test:api:
     - job: "build:k8s-bot"
       artifacts: true
   script:
+    - ./build/ci/generate_octet.bash $CI_COMMIT_SHA >> firstOctet
+    - ./build/ci/generate_octet.bash $CI_PIPELINE_ID >> secondOctet
+    - export GOSDN_TEST_API_ENDPOINT=172.24.$(cat secondOctet).$(cat firstOctet):55055
     - cd ./api
     - go test -race -v -run TestApiIntegration
 
diff --git a/build/ci/generate_port.sh b/build/ci/generate_octet.bash
similarity index 70%
rename from build/ci/generate_port.sh
rename to build/ci/generate_octet.bash
index 941a12843..8becfc98b 100755
--- a/build/ci/generate_port.sh
+++ b/build/ci/generate_octet.bash
@@ -8,7 +8,6 @@ hashed_value=$(echo $input | sha256sum | awk '{print $1}' )
 decimal_value=$((16#$hashed_value))
 decimal_value=${decimal_value/-/}
 
-port=$(((decimal_value % 10000)+50000))
+octet=$(((decimal_value % 255)))
 
-#echo -n $(($port*1))
-echo -n $port
\ No newline at end of file
+echo -n $octet
\ No newline at end of file
diff --git a/build/ci/generate_port2.sh b/build/ci/generate_octet.sh
similarity index 70%
rename from build/ci/generate_port2.sh
rename to build/ci/generate_octet.sh
index f8e1ca304..6cad5addc 100755
--- a/build/ci/generate_port2.sh
+++ b/build/ci/generate_octet.sh
@@ -8,7 +8,6 @@ hashed_value=$(echo $input | sha256sum | awk '{print $1}' )
 decimal_value=$((16#$hashed_value))
 decimal_value=${decimal_value/-/}
 
-port=$(((decimal_value % 10000)+50000))
+octet=$(((decimal_value % 255)))
 
-#echo -n $(($port*1))
-echo -n $port
\ No newline at end of file
+echo -n $octet
\ No newline at end of file
diff --git a/test/integration/nucleusIntegration_test.go b/test/integration/nucleusIntegration_test.go
index f92e93168..6053a291b 100644
--- a/test/integration/nucleusIntegration_test.go
+++ b/test/integration/nucleusIntegration_test.go
@@ -2,7 +2,6 @@ package integration
 
 import (
 	"context"
-	"fmt"
 	"os"
 	"reflect"
 	"sort"
@@ -25,10 +24,7 @@ import (
 const unreachable = "203.0.113.10:6030"
 const testPath = "/system/config/hostname"
 
-var testIP = "141.100.70.171"
-var testPort = "6030"
-var testAddress = testIP + ":" + testPort
-var testAPIEndpoint = "gosdn-latest.apps.ocp.fbi.h-da.de"
+var testAddress = "141.100.70.170:6030"
 var testUsername = "admin"
 var testPassword = "arista"
 var opt *tpb.TransportOption
@@ -44,23 +40,10 @@ func testSetupIntegration() {
 		log.SetLevel(log.PanicLevel)
 	}
 
-	a := os.Getenv("GOSDN_TEST_ENDPOINT_IP")
-	if a != "" {
-		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
-		log.Infof("GOSDN_TEST_API_ENDPOINT set to %v", testAPIEndpoint)
+	addr := os.Getenv("GOSDN_TEST_ENDPOINT")
+	if addr != "" {
+		testAddress = addr
+		log.Infof("GOSDN_TEST_ENDPOINT set to %v", testAddress)
 	}
 	u := os.Getenv("GOSDN_TEST_USER")
 	if u != "" {
diff --git a/test/terraform/containers.tf b/test/terraform/containers.tf
index 8f26aab32..c735846a7 100644
--- a/test/terraform/containers.tf
+++ b/test/terraform/containers.tf
@@ -6,17 +6,9 @@ resource "docker_container" "gosdn" {
   restart = "always"
 
   networks_advanced {
-    name = "bridge"
+    name = "ci"
+    ipv4_address = var.gosdn_address
   }
-
-  ports {
-    internal = 8080
-    external = 8080
-  }
-}
-
-data "local_file" "port" {
-    filename = "port"
 }
 
 # create arista container
@@ -26,13 +18,9 @@ resource "docker_container" "ceos" {
   image = docker_image.ceos.name
   restart = "always"
 
-  ports {
-    internal = 6030
-    external = data.local_file.port.content
-  }
-
   networks_advanced {
-    name = "bridge"
+    name = "ci"
+    ipv4_address = var.ceos_address
   }
 
   command = ["/sbin/init",
diff --git a/test/terraform/variables.tf b/test/terraform/variables.tf
index beacac015..6d8c0b989 100644
--- a/test/terraform/variables.tf
+++ b/test/terraform/variables.tf
@@ -29,4 +29,12 @@ variable "container_tag" {
 variable "network_name" {
   type = string
   default = ""
+}
+
+variable "ceos_address" {
+  type = string
+}
+
+variable "gosdn_address" {
+  type = string
 }
\ No newline at end of file
-- 
GitLab