diff --git a/Makefile b/Makefile index df22fda9a..962f2ef84 100644 --- a/Makefile +++ b/Makefile @@ -36,7 +36,7 @@ requirements: cd tests/serverspec && bundle install --path=vendor test: - python bin/console test:serverspec --threads=auto/2 -v + python bin/console test:serverspec --threads=auto -v baselayout: python bin/console generate:provision --baselayout diff --git a/bin/webdevops/Command.py b/bin/webdevops/Command.py index 3b179aefd..c7979e8d3 100644 --- a/bin/webdevops/Command.py +++ b/bin/webdevops/Command.py @@ -18,7 +18,7 @@ # OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -import os, subprocess, tempfile +import os, subprocess, tempfile, copy, time def execute(cmd, cwd=False, env=None): """ @@ -27,9 +27,20 @@ def execute(cmd, cwd=False, env=None): print 'Execute: %s' % ' '.join(cmd) - # remove _ from env (prevent errors) - if env is not None and '_' in env: - del env['_'] + if env is not None: + env = copy.deepcopy(env) + env['PWD'] = os.environ['PWD'] + env['LC_CTYPE'] = os.environ['LC_CTYPE'] + env['SHELL'] = os.environ['SHELL'] + + if '_' in env: + del env['_'] + + # add system env vars + system_env_vars = ['PWD', 'PATH', 'LC_CTYPE', 'SHELL', 'DOCKER_HOST', 'DOCKER_CERT_PATH', 'DOCKER_MACHINE_NAME', 'DOCKER_TLS_VERIFY'] + for var_name in system_env_vars: + if not var_name in env and var_name in os.environ: + env[var_name] = os.environ[var_name] # set current working directory path_current = os.getcwd() @@ -51,7 +62,7 @@ def execute(cmd, cwd=False, env=None): # wait for process end while proc.poll() is None: - pass + time.sleep(1) # output stdout with open(file_stdout.name, 'r') as f: diff --git a/bin/webdevops/command/DoitCommand.py b/bin/webdevops/command/DoitCommand.py index a805bfb95..c7d1dc3ed 100644 --- a/bin/webdevops/command/DoitCommand.py +++ b/bin/webdevops/command/DoitCommand.py @@ -28,7 +28,7 @@ def run_doit(self, task_loader, configuration): extra_configuration = {} if 'threads' in configuration and configuration.get('threads') > 1: - arguments.extend(['-n', str(configuration.get('threads'))]) + arguments.extend(['-n', str(configuration.get('threads')), '--parallel-type', 'process']) if 'doitConfig' in configuration: extra_configuration = configuration.get('doitConfig') diff --git a/bin/webdevops/taskloader/DockerTestServerspecTaskLoader.py b/bin/webdevops/taskloader/DockerTestServerspecTaskLoader.py index d0a45127a..eacac8c02 100644 --- a/bin/webdevops/taskloader/DockerTestServerspecTaskLoader.py +++ b/bin/webdevops/taskloader/DockerTestServerspecTaskLoader.py @@ -18,7 +18,7 @@ # OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -import os, re, tempfile, json +import os, re, tempfile, json, base64 from webdevops import Command from .BaseDockerTaskLoader import BaseDockerTaskLoader from .BaseTaskLoader import BaseTaskLoader @@ -75,18 +75,18 @@ def task_run(dockerfile, configuration, task): tmp_suffix = '.%s_%s_%s.tmp' % (dockerfile['image']['repository'], dockerfile['image']['imageName'], dockerfile['image']['tag']) test_dockerfile = tempfile.NamedTemporaryFile(prefix='Dockerfile.', suffix=tmp_suffix, dir=configuration.get('serverspecPath'), bufsize=0, delete=False) - # serverspec options - serverspec_opts = [] - serverspec_opts.extend(['--pattern', spec_path]) - - # serverspec env - serverspec_env = DockerTestServerspecTaskLoader.generate_serverspec_environment( + # serverspec conf + serverspec_conf = DockerTestServerspecTaskLoader.generate_serverspec_configuration( path=os.path.basename(test_dockerfile.name), dockerfile=dockerfile, configuration=configuration, is_toolimage=is_toolimage ) + # serverspec options + serverspec_opts = [] + serverspec_opts.extend([spec_path, dockerfile['image']['fullname'], base64.b64encode(json.dumps(serverspec_conf)), os.path.basename(test_dockerfile.name)]) + # dockerfile content dockerfile_content = DockerTestServerspecTaskLoader.generate_dockerfile( dockerfile=dockerfile, @@ -103,15 +103,13 @@ def task_run(dockerfile, configuration, task): print ' path: %s' % (spec_path) print ' args: %s' % (' '.join(serverspec_opts)) print '' - print 'environment:' - print '------------' - print json.dumps(serverspec_env, indent=4, sort_keys=True) + print 'spec configuration:' + print '-------------------' + print json.dumps(serverspec_conf, indent=4, sort_keys=True) print '' print 'Dockerfile:' print '-----------' print dockerfile_content - - os.remove(test_dockerfile.name) return True # check if we have any tests @@ -123,10 +121,6 @@ def task_run(dockerfile, configuration, task): cmd = ['bash', 'serverspec.sh'] cmd.extend(serverspec_opts) - # Set environment variables - env = os.environ.copy() - env.update(serverspec_env) - # create Dockerfile with open(test_dockerfile.name, mode='w', buffering=0) as f: f.write(dockerfile_content) @@ -137,7 +131,7 @@ def task_run(dockerfile, configuration, task): test_status = False for retry_count in range(0, configuration.get('retry')): try: - test_status = Command.execute(cmd, cwd=configuration.get('serverspecPath'), env=env) + test_status = Command.execute(cmd, cwd=configuration.get('serverspecPath')) except Exception as e: print e pass @@ -149,23 +143,22 @@ def task_run(dockerfile, configuration, task): else: print ' failed, giving up' - os.remove(test_dockerfile.name) return test_status @staticmethod - def generate_serverspec_environment(path, dockerfile, configuration, is_toolimage=False): + def generate_serverspec_configuration(path, dockerfile, configuration, is_toolimage=False): """ - Generate serverspec environment dict + Generate serverspec configuration dict """ ret = {} # add default vars - default_env_list = configuration.get('dockerTest.environment.default', False) + default_env_list = configuration.get('dockerTest.configuration.default', False) if default_env_list: ret = default_env_list.to_dict().copy() # add docker image specific vars - image_env_list = configuration.get('dockerTest.environment.image') + image_env_list = configuration.get('dockerTest.configuration.image') if image_env_list: image_env_list = image_env_list.to_dict().copy() for term in image_env_list: @@ -191,6 +184,7 @@ def generate_dockerfile(dockerfile, configuration, is_toolimage=False): ret.append('FROM %s' % dockerfile['image']['fullname']) ret.append('COPY conf/ /') + ret.append('RUN echo "%s" > /DOCKER.IMAGENAME' % dockerfile['image']['fullname']) if is_toolimage: ret.append('RUN chmod +x /loop-entrypoint.sh') diff --git a/conf/console.yml b/conf/console.yml index ce162c082..216e32e28 100644 --- a/conf/console.yml +++ b/conf/console.yml @@ -7,6 +7,7 @@ imagePath: 'documentation/docs/resources/images/' baselayoutPath: 'baselayout' testinfraPath: 'tests/testinfra' serverspecPath: 'tests/serverspec' +testDockerfilePath: 'tests/dockerfile' blacklistFile: 'BLACKLIST' docker: @@ -35,7 +36,7 @@ dockerTest: '/varnish': - 'ENV VARNISH_BACKEND_HOST webdevops.io' - environment: + configuration: default: OS_FAMILY: 'ubuntu' OS_VERSION: '16.04' diff --git a/tests/serverspec/Rakefile b/tests/serverspec/Rakefile index 296e546f9..019d4253e 100644 --- a/tests/serverspec/Rakefile +++ b/tests/serverspec/Rakefile @@ -1,13 +1,36 @@ -require 'rake' -require 'rspec/core/rake_task' - -RSpec.configure do |config| - # show retry status in spec process - config.verbose_retry = true - # show exception that triggers a retry if verbose_retry is set to true - config.display_try_failure_messages = true -end +begin + require 'rake' + require 'json' + require 'base64' + require 'docker' + require 'rspec' + require 'serverspec' + require 'rspec/retry' + require 'rspec/core/rake_task' + + RSpec::Core::RakeTask.new(:spec, :pattern, :dockerImageName, :configuration) do |t, task_args| + t.pattern = task_args[:pattern] + t.fail_on_error = true + + # hide command + t.verbose = false + + $specConfiguration = JSON.parse(Base64.decode64(task_args[:configuration])) + + $dockerImage = Docker::Image.build_from_dir('.', { 'dockerfile' => $specConfiguration['DOCKERFILE'] }) + $specConfiguration['DOCKERIMAGE_ID'] = $dockerImage.id + + print "\n" + print "Environment configuration\n" + print "-------------------------\n" + $specConfiguration.each do |key, value| + print " " + key + ':' + value + "\n" + ENV[key] = value + end + print "\n" + print "\n" + end -RSpec::Core::RakeTask.new(:"spec") do |t, args| - #t.pattern = 'spec/base/*_spec.rb' +rescue LoadError + # no rspec available end diff --git a/tests/serverspec/serverspec.sh b/tests/serverspec/serverspec.sh index c3b01ac12..9a6cd6518 100644 --- a/tests/serverspec/serverspec.sh +++ b/tests/serverspec/serverspec.sh @@ -1,51 +1,19 @@ #!/usr/bin/env bash -# Check if DOCKERFILE is set, needed for test -if [[ -z "$DOCKERFILE" ]]; then - echo "Environment variable 'DOCKERFILE' not set" - exit 1 -fi +set -o pipefail ## trace ERR through pipes +set -o errtrace ## trace ERR through 'time command' and other functions +set -o nounset ## set -u : exit the script if you try to use an uninitialised variable +set -o errexit ## set -e : exit the script if any statement returns a non-true return value -# Check if dockerfile exists -if [[ ! -f "${DOCKERFILE}" ]]; then - # Filesystem is maybe not synced? - sync +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" - # recheck if file is now available - if [[ ! -f "${DOCKERFILE}" ]]; then - echo "Dockerfile $DOCKERFILE' not found" - exit 1 - fi -fi +PARAM_SPEC_FILE="$1" +PARAM_DOCKER_IMAGE="$2" +PARAM_SPEC_CONF="$3" -# Check if DOCKER_IMAGE is set, needed for test -if [[ -z "$DOCKER_IMAGE" ]]; then - echo "Environment variable 'DOCKER_IMAGE' not set" - exit 1 -fi +# LOGFILE="${PARAM_DOCKER_IMAGE//:/_}" +# LOGFILE="${PARAM_DOCKER_IMAGE//\//_}" +# LOGFILE="${SCRIPT_DIR}/logs/${LOGFILE}.log" -# Check if DOCKER_TAG is set, needed for test -if [[ -z "$DOCKER_TAG" ]]; then - echo "Environment variable 'DOCKER_TAG' not set" - exit 1 -fi +exec bundle exec rake spec["$PARAM_SPEC_FILE","$PARAM_DOCKER_IMAGE","$PARAM_SPEC_CONF"] -# Check if OS_FAMILY is set, needed for test -if [[ -z "$OS_FAMILY" ]]; then - echo "Environment variable 'OS_FAMILY' not set" - exit 1 -fi - -# Check if OS_FAMILY is set, needed for test -if [[ -z "$OS_VERSION" ]]; then - echo "Environment variable 'OS_FAMILY' not set" - exit 1 -fi - -echo "Starting serverspec" -echo " OS: ${OS_FAMILY} Version ${OS_VERSION}" -echo " Docker image: ${DOCKER_IMAGE}:${DOCKER_TAG}" -echo " Dockerfile: ${DOCKERFILE}" -echo "" - -exec bundle exec rspec "$@" diff --git a/tests/serverspec/spec/docker/ansible_spec.rb b/tests/serverspec/spec/docker/ansible_spec.rb index 380e528d2..fcf450086 100644 --- a/tests/serverspec/spec/docker/ansible_spec.rb +++ b/tests/serverspec/spec/docker/ansible_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/apache-dev_spec.rb b/tests/serverspec/spec/docker/apache-dev_spec.rb index 704ba62c4..4d839f035 100644 --- a/tests/serverspec/spec/docker/apache-dev_spec.rb +++ b/tests/serverspec/spec/docker/apache-dev_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/apache_spec.rb b/tests/serverspec/spec/docker/apache_spec.rb index 704ba62c4..4d839f035 100644 --- a/tests/serverspec/spec/docker/apache_spec.rb +++ b/tests/serverspec/spec/docker/apache_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/base-app_spec.rb b/tests/serverspec/spec/docker/base-app_spec.rb index 80d086a46..9871aa576 100644 --- a/tests/serverspec/spec/docker/base-app_spec.rb +++ b/tests/serverspec/spec/docker/base-app_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/base_spec.rb b/tests/serverspec/spec/docker/base_spec.rb index 053be94ce..43f41f759 100644 --- a/tests/serverspec/spec/docker/base_spec.rb +++ b/tests/serverspec/spec/docker/base_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/bootstrap_spec.rb b/tests/serverspec/spec/docker/bootstrap_spec.rb index 380e528d2..fcf450086 100644 --- a/tests/serverspec/spec/docker/bootstrap_spec.rb +++ b/tests/serverspec/spec/docker/bootstrap_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/certbot_spec.rb b/tests/serverspec/spec/docker/certbot_spec.rb index d4dae3595..e4c5b0180 100644 --- a/tests/serverspec/spec/docker/certbot_spec.rb +++ b/tests/serverspec/spec/docker/certbot_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/hhvm-apache_spec.rb b/tests/serverspec/spec/docker/hhvm-apache_spec.rb index fbe867530..1a817e502 100644 --- a/tests/serverspec/spec/docker/hhvm-apache_spec.rb +++ b/tests/serverspec/spec/docker/hhvm-apache_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/hhvm-nginx_spec.rb b/tests/serverspec/spec/docker/hhvm-nginx_spec.rb index b26cc05da..3d270c747 100644 --- a/tests/serverspec/spec/docker/hhvm-nginx_spec.rb +++ b/tests/serverspec/spec/docker/hhvm-nginx_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/hhvm_spec.rb b/tests/serverspec/spec/docker/hhvm_spec.rb index a864a9b4a..32b586f20 100644 --- a/tests/serverspec/spec/docker/hhvm_spec.rb +++ b/tests/serverspec/spec/docker/hhvm_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/liquibase_spec.rb b/tests/serverspec/spec/docker/liquibase_spec.rb index 16a456449..ff3605893 100644 --- a/tests/serverspec/spec/docker/liquibase_spec.rb +++ b/tests/serverspec/spec/docker/liquibase_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::liquibase' diff --git a/tests/serverspec/spec/docker/mail-sandbox_spec.rb b/tests/serverspec/spec/docker/mail-sandbox_spec.rb index 9ef495544..a6371519c 100644 --- a/tests/serverspec/spec/docker/mail-sandbox_spec.rb +++ b/tests/serverspec/spec/docker/mail-sandbox_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' @@ -13,6 +12,4 @@ include_examples 'collection::postfix' include_examples 'collection::dovecot' - - end diff --git a/tests/serverspec/spec/docker/nginx-dev_spec.rb b/tests/serverspec/spec/docker/nginx-dev_spec.rb index 59a795608..e9ed14206 100644 --- a/tests/serverspec/spec/docker/nginx-dev_spec.rb +++ b/tests/serverspec/spec/docker/nginx-dev_spec.rb @@ -1,16 +1,14 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' include_examples 'collection::base' include_examples 'collection::nginx' - end diff --git a/tests/serverspec/spec/docker/nginx_spec.rb b/tests/serverspec/spec/docker/nginx_spec.rb index 59a795608..e9ed14206 100644 --- a/tests/serverspec/spec/docker/nginx_spec.rb +++ b/tests/serverspec/spec/docker/nginx_spec.rb @@ -1,16 +1,14 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' include_examples 'collection::base' include_examples 'collection::nginx' - end diff --git a/tests/serverspec/spec/docker/php-apache-dev_spec.rb b/tests/serverspec/spec/docker/php-apache-dev_spec.rb index 79116c148..c0e363246 100644 --- a/tests/serverspec/spec/docker/php-apache-dev_spec.rb +++ b/tests/serverspec/spec/docker/php-apache-dev_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/php-apache_spec.rb b/tests/serverspec/spec/docker/php-apache_spec.rb index fc27e7fff..246a1deec 100644 --- a/tests/serverspec/spec/docker/php-apache_spec.rb +++ b/tests/serverspec/spec/docker/php-apache_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' @@ -29,4 +28,5 @@ else include_examples 'collection::php-fpm7::webserver-test::production' end + end diff --git a/tests/serverspec/spec/docker/php-dev_spec.rb b/tests/serverspec/spec/docker/php-dev_spec.rb index c18f86b5e..70cd1111e 100644 --- a/tests/serverspec/spec/docker/php-dev_spec.rb +++ b/tests/serverspec/spec/docker/php-dev_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/php-nginx-dev_spec.rb b/tests/serverspec/spec/docker/php-nginx-dev_spec.rb index dfb49c29d..22eca235e 100644 --- a/tests/serverspec/spec/docker/php-nginx-dev_spec.rb +++ b/tests/serverspec/spec/docker/php-nginx-dev_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/php-nginx_spec.rb b/tests/serverspec/spec/docker/php-nginx_spec.rb index 294446e39..0e90ebd7c 100644 --- a/tests/serverspec/spec/docker/php-nginx_spec.rb +++ b/tests/serverspec/spec/docker/php-nginx_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/php_spec.rb b/tests/serverspec/spec/docker/php_spec.rb index 098c60867..1cf32ab50 100644 --- a/tests/serverspec/spec/docker/php_spec.rb +++ b/tests/serverspec/spec/docker/php_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/postfix_spec.rb b/tests/serverspec/spec/docker/postfix_spec.rb index 3bdcbd6da..e2cdfd21b 100644 --- a/tests/serverspec/spec/docker/postfix_spec.rb +++ b/tests/serverspec/spec/docker/postfix_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/samson-deployment_spec.rb b/tests/serverspec/spec/docker/samson-deployment_spec.rb index 6d685d622..943ece68d 100644 --- a/tests/serverspec/spec/docker/samson-deployment_spec.rb +++ b/tests/serverspec/spec/docker/samson-deployment_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'bootstrap::layout' diff --git a/tests/serverspec/spec/docker/sphinx_spec.rb b/tests/serverspec/spec/docker/sphinx_spec.rb index 3dad0e053..175762f02 100644 --- a/tests/serverspec/spec/docker/sphinx_spec.rb +++ b/tests/serverspec/spec/docker/sphinx_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/ssh_spec.rb b/tests/serverspec/spec/docker/ssh_spec.rb index cee534c74..aa8277d81 100644 --- a/tests/serverspec/spec/docker/ssh_spec.rb +++ b/tests/serverspec/spec/docker/ssh_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/varnish_spec.rb b/tests/serverspec/spec/docker/varnish_spec.rb index 9e6eeb4d9..a502b279b 100644 --- a/tests/serverspec/spec/docker/varnish_spec.rb +++ b/tests/serverspec/spec/docker/varnish_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/docker/vsftp_spec.rb b/tests/serverspec/spec/docker/vsftp_spec.rb index 49b443ad9..b874d69ef 100644 --- a/tests/serverspec/spec/docker/vsftp_spec.rb +++ b/tests/serverspec/spec/docker/vsftp_spec.rb @@ -1,11 +1,10 @@ require 'serverspec' require 'docker' -require 'spec_helper' +require 'spec_init' describe "Dockerfile" do before(:all) do - @image = Docker::Image.build_from_dir('.', { 'dockerfile' => ENV['DOCKERFILE'] }) - set :docker_image, @image.id + set :docker_image, ENV['DOCKERIMAGE_ID'] end #include_examples 'collection::bootstrap' diff --git a/tests/serverspec/spec/image.rb b/tests/serverspec/spec/image.rb deleted file mode 100644 index 9124841f0..000000000 --- a/tests/serverspec/spec/image.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'serverspec' -require 'docker' - -set :backend, :exec -set :docker_container, ENV['DOCKER_IMAGE'] - -describe docker_image(ENV['DOCKER_IMAGE']) do - its(:inspection) { should_not include 'Architecture' => 'i386' } - its(:inspection) { should include 'Architecture' => 'amd64' } -end diff --git a/tests/serverspec/spec/spec_autoload.rb b/tests/serverspec/spec/spec_autoload.rb new file mode 100644 index 000000000..5f74823bf --- /dev/null +++ b/tests/serverspec/spec/spec_autoload.rb @@ -0,0 +1,4 @@ +base_spec_dir = Pathname.new(File.join(File.dirname(__FILE__))) + +Dir[base_spec_dir.join('shared/**/*.rb')].sort.each{ |f| require f } +Dir[base_spec_dir.join('collection/**.rb')].sort.each{ |f| require f } diff --git a/tests/serverspec/spec/spec_config.rb b/tests/serverspec/spec/spec_config.rb new file mode 100644 index 000000000..fbeec5655 --- /dev/null +++ b/tests/serverspec/spec/spec_config.rb @@ -0,0 +1,81 @@ +# ----------------------------------------------- +# RSpec/Serverspec configuration +# ----------------------------------------------- + +RSpec.configure do |config| + config.fail_fast = 3 + + # show retry status in spec process + config.verbose_retry = true + + # show exception that triggers a retry if verbose_retry is set to true + config.display_try_failure_messages = true +end + +set :backend, :docker +set :docker_container, ENV['DOCKER_IMAGE'] +set :os, :family => ENV['OS_FAMILY'], :version => ENV['OS_VERSION'], :arch => 'x86_64' + +Excon.defaults[:write_timeout] = 1000 +Excon.defaults[:read_timeout] = 1000 + +# ----------------------------------------------- +# General spec configuration +# ----------------------------------------------- + +$packageVersions = {} +$packageVersions[:ansible] = %r!ansible 2.([0-9]\.?)+! +$packageVersions[:ansiblePlaybook] = %r!ansible-playbook 2.([0-9]\.?)+! + +$testConfiguration = {} + +if ['redhat', 'alpine'].include?(os[:family]) + $testConfiguration[:ansiblePath] = "/usr/bin" +else + $testConfiguration[:ansiblePath] = "/usr/local/bin" +end + +$testConfiguration[:php] = 7 +$testConfiguration[:phpXdebug] = true +$testConfiguration[:phpApcu] = true +$testConfiguration[:phpRedis] = true +$testConfiguration[:phpMhash] = true +$testConfiguration[:phpBlackfire] = false + +if ((os[:family] == 'ubuntu' and os[:version] == '12.04') or + (os[:family] == 'ubuntu' and os[:version] == '14.04') or + (os[:family] == 'ubuntu' and os[:version] == '15.04') or + (os[:family] == 'ubuntu' and os[:version] == '15.10') or + (os[:family] == 'redhat' and os[:version] == '7') or + (os[:family] == 'debian' and os[:version] == '7') or + (os[:family] == 'debian' and os[:version] == '8') or + (os[:family] == 'alpine' and os[:version] == '3') or + (ENV['DOCKER_TAG'].match('php5'))) + $testConfiguration[:php] = 5 +end + +if (ENV['DOCKER_TAG'].match('php7')) + $testConfiguration[:php] = 7 +end + + +if ENV['PHP_XDEBUG'] and ENV['PHP_XDEBUG'] == "0" + $testConfiguration[:phpXdebug] = false +end + +if ENV['PHP_APCU'] and ENV['PHP_APCU'] == "0" + $testConfiguration[:phpApcu] = false +end + +if ENV['PHP_REDIS'] and ENV['PHP_REDIS'] == "0" + $testConfiguration[:phpRedis] = false +end + +if ENV['PHP_MHASH'] and ENV['PHP_MHASH'] == "0" + $testConfiguration[:phpMhash] = false +end + +if ENV['PHP_BLACKFIRE'] and ENV['PHP_BLACKFIRE'] == "1" + $testConfiguration[:phpBlackfire] = true + $testConfiguration[:phpXdebug] = false +end diff --git a/tests/serverspec/spec/spec_helper.rb b/tests/serverspec/spec/spec_helper.rb index ffa8fc105..3f6b091d0 100644 --- a/tests/serverspec/spec/spec_helper.rb +++ b/tests/serverspec/spec/spec_helper.rb @@ -1,76 +1,3 @@ -require 'serverspec' -require 'rspec/retry' - -base_spec_dir = Pathname.new(File.join(File.dirname(__FILE__))) - -Dir[base_spec_dir.join('shared/**/*.rb')].sort.each{ |f| require f } -Dir[base_spec_dir.join('collection/**.rb')].sort.each{ |f| require f } - -set :backend, :docker -set :docker_container, ENV['DOCKER_IMAGE'] -set :os, :family => ENV['OS_FAMILY'], :version => ENV['OS_VERSION'], :arch => 'x86_64' - -Excon.defaults[:write_timeout] = 1000 -Excon.defaults[:read_timeout] = 1000 - -$dockerInfo = {} -$dockerInfo[:image] = ENV['DOCKER_IMAGE'] -$dockerInfo[:tag] = ENV['DOCKER_TAG'] -$dockerInfo[:dockerfile] = ENV['DOCKERFILE'] - -$packageVersions = {} -$packageVersions[:ansible] = %r!ansible 2.([0-9]\.?)+! -$packageVersions[:ansiblePlaybook] = %r!ansible-playbook 2.([0-9]\.?)+! - -$testConfiguration = {} - -if ['redhat', 'alpine'].include?(os[:family]) - $testConfiguration[:ansiblePath] = "/usr/bin" -else - $testConfiguration[:ansiblePath] = "/usr/local/bin" -end - -$testConfiguration[:php] = 7 -$testConfiguration[:phpXdebug] = true -$testConfiguration[:phpApcu] = true -$testConfiguration[:phpRedis] = true -$testConfiguration[:phpMhash] = true -$testConfiguration[:phpBlackfire] = false - -if ((os[:family] == 'ubuntu' and os[:version] == '12.04') or - (os[:family] == 'ubuntu' and os[:version] == '14.04') or - (os[:family] == 'ubuntu' and os[:version] == '15.04') or - (os[:family] == 'ubuntu' and os[:version] == '15.10') or - (os[:family] == 'redhat' and os[:version] == '7') or - (os[:family] == 'debian' and os[:version] == '7') or - (os[:family] == 'debian' and os[:version] == '8') or - (os[:family] == 'alpine' and os[:version] == '3') or - ($dockerInfo[:tag].match('php5'))) - $testConfiguration[:php] = 5 -end - -if ($dockerInfo[:tag].match('php7')) - $testConfiguration[:php] = 7 -end - - -if ENV['PHP_XDEBUG'] and ENV['PHP_XDEBUG'] == "0" - $testConfiguration[:phpXdebug] = false -end - -if ENV['PHP_APCU'] and ENV['PHP_APCU'] == "0" - $testConfiguration[:phpApcu] = false -end - -if ENV['PHP_REDIS'] and ENV['PHP_REDIS'] == "0" - $testConfiguration[:phpRedis] = false -end - -if ENV['PHP_MHASH'] and ENV['PHP_MHASH'] == "0" - $testConfiguration[:phpMhash] = false -end - -if ENV['PHP_BLACKFIRE'] and ENV['PHP_BLACKFIRE'] == "1" - $testConfiguration[:phpBlackfire] = true - $testConfiguration[:phpXdebug] = false -end +# +# placeholder for methods and stuff +# diff --git a/tests/serverspec/spec/spec_init.rb b/tests/serverspec/spec/spec_init.rb new file mode 100644 index 000000000..d890915f2 --- /dev/null +++ b/tests/serverspec/spec/spec_init.rb @@ -0,0 +1,14 @@ +require 'serverspec' +require 'rspec/retry' +require 'spec_config' +require 'spec_autoload' +require 'spec_helper' + +print "Serverspec configuration\n" +print "------------------------\n" +print " DOCKERIMAGE_ID: " + ENV['DOCKERIMAGE_ID'] + "\n" +print " DOCKER_IMAGE: " + ENV['DOCKER_IMAGE'] + "\n" +print " OS_FAMILY: " + ENV['OS_FAMILY'] + "\n" +print " OS_VERSION: " + ENV['OS_VERSION'] + "\n" +print " OS_VERSION: " + ENV['OS_VERSION'] + "\n" +print "\n"