Browse Source

Maintenance: switch to Docker based OTRS import testing rather than using external services.

Martin Gruner 3 years ago
parent
commit
1cb5b04d96

+ 58 - 13
.gitlab/ci/integration/otrs.yml

@@ -1,37 +1,82 @@
 .template_integration_otrs: &template_integration_otrs
-  allow_failure: true
   extends:
     - .template_integration
   script:
     - bundle exec rake zammad:db:unseeded
     - bundle exec rails test test/integration/otrs_import_test.rb
+  variables:
+    FF_NETWORK_PER_BUILD: 1   # https://docs.gitlab.com/runner/configuration/feature-flags.html
+    IMPORT_OTRS_ENDPOINT: "http://zammad-ci-otrsimport-app/otrs/public.pl?Action=ZammadMigrator"
+    TZ: "Europe/Berlin"       # Required for the zammad-ci-otrsimport-app containers
 
 otrs:6:
   <<: *template_integration_otrs
-  variables:
-    IMPORT_OTRS_ENDPOINT: "https://vz1185.test.znuny.com/otrs/public.pl?Action=ZammadMigrator"
+  services:
+    - name: registry.znuny.com/docker/zammad-mysql:stable
+      alias: mysql
+    - name: registry.znuny.com/docker/zammad-postgresql:stable
+      alias: postgresql
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs6
+      alias: zammad-ci-otrsimport-db
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs6
+      alias: zammad-ci-otrsimport-app
 
 otrs:5:
   <<: *template_integration_otrs
-  variables:
-    IMPORT_OTRS_ENDPOINT: "http://vz1109.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
+  services:
+    - name: registry.znuny.com/docker/zammad-mysql:stable
+      alias: mysql
+    - name: registry.znuny.com/docker/zammad-postgresql:stable
+      alias: postgresql
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs5
+      alias: zammad-ci-otrsimport-db
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs5
+      alias: zammad-ci-otrsimport-app
 
 otrs:4:
   <<: *template_integration_otrs
-  variables:
-    IMPORT_OTRS_ENDPOINT: "http://vz383.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
+  services:
+    - name: registry.znuny.com/docker/zammad-mysql:stable
+      alias: mysql
+    - name: registry.znuny.com/docker/zammad-postgresql:stable
+      alias: postgresql
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs4
+      alias: zammad-ci-otrsimport-db
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs4
+      alias: zammad-ci-otrsimport-app
 
 otrs:33:
   <<: *template_integration_otrs
-  variables:
-    IMPORT_OTRS_ENDPOINT: "http://vz305.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
+  services:
+    - name: registry.znuny.com/docker/zammad-mysql:stable
+      alias: mysql
+    - name: registry.znuny.com/docker/zammad-postgresql:stable
+      alias: postgresql
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs33
+      alias: zammad-ci-otrsimport-db
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs33
+      alias: zammad-ci-otrsimport-app
 
 otrs:32:
   <<: *template_integration_otrs
-  variables:
-    IMPORT_OTRS_ENDPOINT: "http://vz382.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
+  services:
+    - name: registry.znuny.com/docker/zammad-mysql:stable
+      alias: mysql
+    - name: registry.znuny.com/docker/zammad-postgresql:stable
+      alias: postgresql
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs32
+      alias: zammad-ci-otrsimport-db
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs32
+      alias: zammad-ci-otrsimport-app
 
 otrs:31:
   <<: *template_integration_otrs
-  variables:
-    IMPORT_OTRS_ENDPOINT: "http://vz381.demo.znuny.com/otrs/public.pl?Action=ZammadMigrator"
+  services:
+    - name: registry.znuny.com/docker/zammad-mysql:stable
+      alias: mysql
+    - name: registry.znuny.com/docker/zammad-postgresql:stable
+      alias: postgresql
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-db:otrs31
+      alias: zammad-ci-otrsimport-db
+    - name: registry.znuny.com/docker/zammad-ci-otrsimport-app:otrs31
+      alias: zammad-ci-otrsimport-app

+ 17 - 1
script/build/database_config.rb

@@ -1,6 +1,7 @@
 # Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
 
 require 'yaml'
+require 'resolv'
 
 cnf = YAML.load_file(File.join(__dir__, '../../config/database/database.yml'))
 
@@ -8,6 +9,7 @@ cnf.delete('default')
 
 database = ENV['ENFORCE_DB_SERVICE']
 
+# Lookup in /etc/hosts first: gitlab uses that if FF_NETWORK_PER_BUILD is not set.
 if !database
   hostsfile = '/etc/hosts'
   database  = %w[postgresql mysql].shuffle.find do |possible_database|
@@ -15,7 +17,21 @@ if !database
   end
 end
 
-raise "Can't find any supported database in #{hostsfile}." if database.nil?
+# Lookup via DNS if needed: gitlab uses that if FF_NETWORK_PER_BUILD is enabled.
+if !database
+  dns = Resolv::DNS.new
+  dns.timeouts = 3
+  database = %w[postgresql mysql].shuffle.find do |possible_database|
+    # Perform a lookup of the database host to check if it is configured as a service.
+    if dns.getaddress possible_database
+      next possible_database
+    end
+  rescue Resolv::ResolvError
+    # Ignore DNS lookup errors
+  end
+end
+
+raise "Can't find any supported database." if database.nil?
 
 puts "NOTICE: Found/selected #{database} Database Service"
 

+ 3 - 6
test/integration/otrs_import_test.rb

@@ -20,13 +20,10 @@ class OtrsImportTest < ActiveSupport::TestCase
   # check settings items
   test 'check settings' do
     http      = nil
-    system_id = nil
-    if ENV['IMPORT_OTRS_ENDPOINT'] =~ %r{^(http|https)://((.+?)\..+?)/}
-      http      = $1
-      system_id = $3
-      system_id.gsub!(%r{[A-z]}, '') # strip chars
+    if ENV['IMPORT_OTRS_ENDPOINT'] =~ %r{^(http|https)://}
+      http = $1
     end
-    assert_equal( system_id, Setting.get('system_id'), 'system_id' )
+    assert( Setting.get('system_id'), 'system_id' )
     assert_equal( http, Setting.get('http_type'), 'http_type' )
     assert_equal( 'Example Company', Setting.get('organization'), 'organization' )
   end