Skip to content

Commit

Permalink
chore: enable using GitLab EE in functional tests
Browse files Browse the repository at this point in the history
Enable using GitLab Enterprise Edition (EE) in the functional tests.
This will allow us to add functional tests for EE only features in the
functional tests.
  • Loading branch information
JohnVillalovos committed Jul 26, 2022
1 parent 67ab24f commit 17c01ea
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 3 deletions.
23 changes: 23 additions & 0 deletions tests/functional/conftest.py
Expand Up @@ -20,6 +20,17 @@ 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()
logging.info(f"deletion_adjourned_period: {settings.deletion_adjourned_period}")
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(
Expand Down Expand Up @@ -180,6 +191,18 @@ 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_runner(gl):
container = "gitlab-runner-test"
Expand Down
4 changes: 2 additions & 2 deletions 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
51 changes: 51 additions & 0 deletions 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) }
4 changes: 3 additions & 1 deletion tests/functional/fixtures/docker-compose.yml
Expand Up @@ -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'
Expand Down

0 comments on commit 17c01ea

Please sign in to comment.