diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a3efdf1c92d3c7328aedcdcb8be9a66b4c7ded8f..4c3aaaf8b9a980835405c2db52f18872e4b780c6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,7 @@ variables: GOLANG_VERSION: "1.22" GNMI_TARGET_IMAGE: registry.code.fbi.h-da.de/danet/gnmi-target/debian:master GNMI_TARGET_INTEGRATION_IMAGE: "$CI_REGISTRY_IMAGE/gnmi-target-integration-test:${CI_COMMIT_SHA}" + DOCKER_TLS_CERTDIR: "/certs" workflow: rules: diff --git a/.gitlab/ci/.test.yml b/.gitlab/ci/.test.yml index 6fe9f251de86c2f0a73cca3eb5669f6073cf0721..20cd508b90897386d1e38cbbc9f85faba30ca929 100644 --- a/.gitlab/ci/.test.yml +++ b/.gitlab/ci/.test.yml @@ -11,7 +11,8 @@ integration-test-gosdn: MONGO_INITDB_ROOT_PASSWORD: example INTEGRATION_TEST_TARGET_A: gnmi-target_A:7030 INTEGRATION_TEST_TARGET_B: gnmi-target_B:7030 - RABBITMQ_HOSTNAME: rabbitmq + INTEGRATION_TEST_RABBITMQ_HOSTNAME: rabbitmq + INTEGRATION_TEST_CONTROLLER_URL: gosdn:55055 services: - name: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/mongo:7 alias: mongo @@ -28,20 +29,13 @@ integration-test-gosdn: alias: gnmi-target_B command: ["start", "--cert", "/etc/gnmi-target/ssl/certs/gnmi-target-selfsigned.crt", "--key", "/etc/gnmi-target/ssl/private/gnmi-target-selfsigned.key", "--ca_file", "/etc/gnmi-target/ssl/ca.crt"] # Use gosdn docker image from this branch - # Uncomment later when fixed. See: https://code.fbi.h-da.de/danet/gosdn/-/issues/335 - #- name: "${CI_REGISTRY_IMAGE}:${DOCKER_TAG}_integration-test" - # alias: gosdn - # variables: - # GOSDN_ADMIN_PASSWORD: TestPassword - # command: ["--config", "/app/configs/integration-test-gosdn.toml", "--security", "secure"] + - name: "${CI_REGISTRY_IMAGE}:${DOCKER_TAG}_integration-test" + alias: gosdn + variables: + GOSDN_ADMIN_PASSWORD: TestPassword + command: ["--config", "/app/configs/integration-test-gosdn.toml", "--security", "secure"] before_script: - bash -c "$(curl -sL https://get-gnmic.openconfig.net)" script: - # Remove start of goSDN later when fixed. See: https://code.fbi.h-da.de/danet/gosdn/-/issues/335 - - cp -r artifacts/ssl/gosdn/certs artifacts/ssl/ - - cp -r artifacts/ssl/gosdn/private artifacts/ssl/ - - mkdir artifacts/configs && cp controller/configs/gNMISubscriptions.txt.example artifacts/configs/gNMISubscriptions.txt - - make build-gosdn - - cd artifacts && GOSDN_ADMIN_PASSWORD=TestPassword ./gosdn --config ../controller/configs/integration-test-gosdn.toml --security secure & - - INTEGRATION_TEST_CONTROLLER_URL="localhost:55055" go test -p 1 ./integration-tests/* + - go test -p 1 ./integration-tests/* <<: *test diff --git a/.gitlab/ci/gosdn-integration.Dockerfile b/.gitlab/ci/gosdn-integration.Dockerfile index 7629a5218e9995bd0e35ffb846c96d2d53b785c3..51e3a406ce48c93f1a4fdee551f17fe369593caa 100644 --- a/.gitlab/ci/gosdn-integration.Dockerfile +++ b/.gitlab/ci/gosdn-integration.Dockerfile @@ -4,7 +4,3 @@ FROM ${GOSDN_IMAGE} RUN mkdir /app/ssl COPY ./artifacts/ssl/gosdn /app/ssl - -#COPY .gitlab/ci/test-start.sh test-start.sh -#RUN chmod +x test-start.sh -#ENTRYPOINT ["./test-start.sh"] diff --git a/controller/eventService/Service.go b/controller/eventService/Service.go index 7c822fc8a6b54e0d4cc07a094f9647c8f4cbd28b..330cb195b861999cc6641da0a60228816323460c 100644 --- a/controller/eventService/Service.go +++ b/controller/eventService/Service.go @@ -13,6 +13,7 @@ import ( amqp "github.com/rabbitmq/amqp091-go" "github.com/sethvargo/go-retry" + "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus" ) @@ -80,12 +81,23 @@ func NewEventService() (interfaces.Service, error) { } func connect(addr string) (*amqp.Connection, error) { - conn, err := amqp.Dial(addr) - if err != nil { - return nil, &customerrs.AMQPInitFailError{Action: "failed to connect to RabbitMQ", Err: err} + var err error + // Will equal two Minuten of retries + retries := 60 + + logrus.Infof("will try to connect to rabbitmq: %s", addr) + + for i := 0; i < retries; i++ { + conn, err := amqp.Dial(addr) + if err == nil { + logrus.Info("Connected to RabbitMQ") + return conn, nil + } + logrus.Errorf("could not connect to RabbitMQ with error: %s. Retrying in 2 seconds.", err.Error()) + time.Sleep(2 * time.Second) } - return conn, nil + return nil, &customerrs.AMQPInitFailError{Action: "finally failed to connect to RabbitMQ", Err: err} } // Reconnect attempts to setup a new connection to the RabbitMQ server after an disconnect. diff --git a/integration-tests/application_tests/application_test.go b/integration-tests/application_tests/application_test.go index 721bd2cfa770f6a30826e75e49ddeb907a849e0f..926f4d68c4b186a8779ef191905857cee27db957 100644 --- a/integration-tests/application_tests/application_test.go +++ b/integration-tests/application_tests/application_test.go @@ -61,12 +61,18 @@ func TestMain(m *testing.M) { topics := []event.Topic{event.ManagedNetworkElement, event.User, event.Role} rabbitMQAddress := "" - envVarRabbitmq := os.Getenv("RABBITMQ_HOSTNAME") + envVarRabbitmq := os.Getenv("INTEGRATION_TEST_RABBITMQ_HOSTNAME") if envVarRabbitmq != "" { rabbitMQAddress = envVarRabbitmq } - application = NewApplication(ctx, conn, ":55055", topics, rabbitMQAddress) + controllerUrl := "localhost:55055" + controllerEnv := os.Getenv("INTEGRATION_TEST_CONTROLLER_URL") + if controllerEnv != "" { + controllerUrl = controllerEnv + } + + application = NewApplication(ctx, conn, controllerUrl, topics, rabbitMQAddress) eventTypeCallbackTuples := []event.TypeToCallbackTuple{ {