diff --git a/tests/functional/api/test_groups.py b/tests/functional/api/test_groups.py index 83d032c88..88e5a369c 100644 --- a/tests/functional/api/test_groups.py +++ b/tests/functional/api/test_groups.py @@ -218,8 +218,9 @@ def test_group_subgroups_projects(gl, user): group4.delete() -@pytest.mark.skip -def test_group_wiki(group): +def test_group_wiki(gitlab_ee, group): + if not gitlab_ee: + pytest.skip("Requires GitLab EE to run") content = "Group Wiki page content" wiki = group.wikis.create({"title": "groupwikipage", "content": content}) assert wiki in group.wikis.list() @@ -234,8 +235,9 @@ def test_group_wiki(group): assert wiki not in group.wikis.list() -@pytest.mark.skip(reason="EE feature") -def test_group_hooks(group): +def test_group_hooks(gitlab_ee, group): + if not gitlab_ee: + pytest.skip("Requires GitLab EE to run") hook = group.hooks.create({"url": "http://hook.url"}) assert hook in group.hooks.list() diff --git a/tests/functional/conftest.py b/tests/functional/conftest.py index 6cab31c62..8cebba0b9 100644 --- a/tests/functional/conftest.py +++ b/tests/functional/conftest.py @@ -20,6 +20,16 @@ def fixture_dir(test_dir): def reset_gitlab(gl: gitlab.Gitlab) -> None: """Delete resources (such as projects, groups, users) that shouldn't exist.""" + if is_gitlab_ee(gl): + logging.info("GitLab EE detected") + # NOTE(jlvillal): By default in GitLab EE it will wait 7 days before + # deleting a group. Change it to 0 days. + settings = gl.settings.get() + if settings.deletion_adjourned_period != 0: + logging.info("Setting deletion_adjourned_period to 0") + settings.deletion_adjourned_period = 0 + settings.save() + for project in gl.projects.list(): for deploy_token in project.deploytokens.list(): logging.info( @@ -180,6 +190,23 @@ def gl(gitlab_config): return instance +def is_gitlab_ee(gl: gitlab.Gitlab) -> bool: + """Determine if we are running with GitLab EE as opposed to GitLab CE""" + try: + license = gl.get_license() + except gitlab.exceptions.GitlabLicenseError: + license = None + # If we have a license then we assume we are running on GitLab EE + if license: + return True + return False + + +@pytest.fixture(scope="session") +def gitlab_ee(gl) -> bool: + return is_gitlab_ee(gl=gl) + + @pytest.fixture(scope="session") def gitlab_runner(gl): container = "gitlab-runner-test" diff --git a/tests/functional/fixtures/.env b/tests/functional/fixtures/.env index da9332fd7..e7be6c98e 100644 --- a/tests/functional/fixtures/.env +++ b/tests/functional/fixtures/.env @@ -1,2 +1,2 @@ -GITLAB_IMAGE=gitlab/gitlab-ce -GITLAB_TAG=14.9.2-ce.0 +GITLAB_IMAGE=gitlab/gitlab-ee +GITLAB_TAG=14.9.2-ee.0 diff --git a/tests/functional/fixtures/create_license.rb b/tests/functional/fixtures/create_license.rb new file mode 100644 index 000000000..04ddb4533 --- /dev/null +++ b/tests/functional/fixtures/create_license.rb @@ -0,0 +1,51 @@ +# NOTE: As of 2022-06-01 the GitLab Enterprise Edition License has the following +# section: +# Notwithstanding the foregoing, you may copy and modify the Software for development +# and testing purposes, without requiring a subscription. +# +# https://gitlab.com/gitlab-org/gitlab/-/blob/29503bc97b96af8d4876dc23fc8996e3dab7d211/ee/LICENSE +# +# This code is strictly intended for use in the testing framework of python-gitlab + +# Code inspired by MIT licensed code at: https://github.com/CONIGUERO/gitlab-license.git + +require 'openssl' +require 'gitlab/license' + +# Generate a 2048 bit key pair. +license_encryption_key = OpenSSL::PKey::RSA.generate(2048) + +# Save the private key +File.open("/.license_encryption_key", "w") { |f| f.write(license_encryption_key.to_pem) } +# Save the public key +public_key = license_encryption_key.public_key +File.open("/.license_encryption_key.pub", "w") { |f| f.write(public_key.to_pem) } +File.open("/opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub", "w") { |f| f.write(public_key.to_pem) } + +Gitlab::License.encryption_key = license_encryption_key + +# Build a new license. +license = Gitlab::License.new + +license.licensee = { + "Name" => "python-gitlab-ci", + "Company" => "python-gitlab-ci", + "Email" => "python-gitlab-ci@example.com", +} + +# The date the license starts. +license.starts_at = Date.today +# Want to make sure we get at least 1 day of usage. Do two days after because if CI +# started at 23:59 we could be expired in one minute if we only did one next_day. +license.expires_at = Date.today.next_day.next_day + +# Use 'ultimate' plan so that we can test all features in the CI +license.restrictions = { + :plan => "ultimate", + :id => rand(1000..99999999) +} + +# Export the license, which encrypts and encodes it. +data = license.export + +File.open("/python-gitlab-ci.gitlab-license", 'w') { |file| file.write(data) } diff --git a/tests/functional/fixtures/docker-compose.yml b/tests/functional/fixtures/docker-compose.yml index ec932727f..9b93d0aac 100644 --- a/tests/functional/fixtures/docker-compose.yml +++ b/tests/functional/fixtures/docker-compose.yml @@ -31,12 +31,14 @@ services: gitlab_exporter['enable'] = false grafana['enable'] = false letsencrypt['enable'] = false + gitlab_rails['initial_license_file'] = '/python-gitlab-ci.gitlab-license' entrypoint: - /bin/sh - -c - - chmod 644 /opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/* && /assets/wrapper + - ruby /create_license.rb && chmod 644 /opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/* && /assets/wrapper volumes: - ${PWD}/tests/functional/fixtures/set_token.rb:/opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/003_set_token.rb + - ${PWD}/tests/functional/fixtures/create_license.rb:/create_license.rb ports: - '8080:80' - '2222:22'
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: