Update create_sites_and_configurations for devstack wl tests

This commit is contained in:
bmedx
2018-02-23 15:09:13 -05:00
parent b9d6ead3a3
commit f17cf3ad9a
2 changed files with 90 additions and 24 deletions

View File

@@ -32,7 +32,12 @@ class Command(BaseCommand):
dns_name = None
theme_path = None
ecommerce_user = None
ecommerce_base_url_fmt = None
ecommerce_oidc_url = None
discovery_user = None
discovery_base_url_fmt = None
discovery_oidc_url = None
configuration_filename = None
def add_arguments(self, parser):
"""
@@ -52,6 +57,12 @@ class Command(BaseCommand):
required=True
)
parser.add_argument(
"--devstack",
action='store_true',
help="Use devstack config, otherwise sandbox config is assumed",
)
def _create_oauth2_client(self, url, site_name, is_discovery=True):
"""
Creates the oauth2 client and add it in trusted clients.
@@ -119,25 +130,17 @@ class Command(BaseCommand):
def _update_default_clients(self):
"""
These two clients is being created by default without service
These two clients are being created by default without service
users so we have to associate the service users to them.
"""
ecommerce_queryset = Client.objects.filter(
redirect_uri="https://ecommerce-{dns_name}.sandbox.edx.org/complete/edx-oidc/".format(
dns_name=self.dns_name
)
)
ecommerce_queryset = Client.objects.filter(redirect_uri=self.ecommerce_oidc_url)
if ecommerce_queryset:
ecommerce_client = ecommerce_queryset[0]
ecommerce_client.user = self.ecommerce_user
ecommerce_client.save()
discovery_queryset = Client.objects.filter(
redirect_uri="https://discovery-{dns_name}.sandbox.edx.org/complete/edx-oidc/".format(
dns_name=self.dns_name
)
)
discovery_queryset = Client.objects.filter(redirect_uri=self.discovery_oidc_url)
if discovery_queryset:
discovery_client = discovery_queryset[0]
discovery_client.user = self.discovery_user
@@ -155,7 +158,7 @@ class Command(BaseCommand):
}
"""
site_data = {}
for config_file in self.find('sandbox_configuration.json', self.theme_path):
for config_file in self.find(self.configuration_filename, self.theme_path):
LOG.info("Reading file from {file}".format(file=config_file))
configuration_data = json.loads(
json.dumps(
@@ -192,10 +195,23 @@ class Command(BaseCommand):
return service_user
def handle(self, *args, **options):
self.theme_path = options['theme_path']
self.dns_name = options['dns_name']
self.theme_path = options['theme_path']
if options['devstack']:
configuration_prefix = "devstack"
self.discovery_oidc_url = "http://discovery-{}.e2e.devstack:18381/complete/edx-oidc/".format(self.dns_name)
self.discovery_base_url_fmt = "http://discovery-{site_domain}:18381/"
self.ecommerce_oidc_url = "http://ecommerce-{}.e2e.devstack:18130/complete/edx-oidc/".format(self.dns_name)
self.ecommerce_base_url_fmt = "http://ecommerce-{site_domain}:18130/"
else:
configuration_prefix = "sandbox"
self.discovery_oidc_url = "https://discovery-{}.sandbox.edx.org/complete/edx-oidc/".format(self.dns_name)
self.discovery_base_url_fmt = "https://discovery-{site_domain}/"
self.ecommerce_oidc_url = "https://ecommerce-{}.sandbox.edx.org/complete/edx-oidc/".format(self.dns_name)
self.ecommerce_base_url_fmt = "https://ecommerce-{site_domain}/"
self.configuration_filename = '{}_configuration.json'.format(configuration_prefix)
self.discovery_user = self.get_or_create_service_user("lms_catalog_service_user")
self.ecommerce_user = self.get_or_create_service_user("ecommerce_worker")
@@ -206,8 +222,8 @@ class Command(BaseCommand):
for site_name, site_data in all_sites.items():
site_domain = site_data['site_domain']
discovery_url = "https://discovery-{site_domain}/".format(site_domain=site_domain)
ecommerce_url = "https://ecommerce-{site_domain}/".format(site_domain=site_domain)
discovery_url = self.discovery_base_url_fmt.format(site_domain=site_domain)
ecommerce_url = self.ecommerce_base_url_fmt.format(site_domain=site_domain)
LOG.info("Creating '{site_name}' Site".format(site_name=site_name))
self._create_sites(site_domain, site_data['theme_dir_name'], site_data['configuration'])

View File

@@ -18,23 +18,34 @@ SITES = ["site_a", "site_b"]
MANAGEMENT_COMMAND_PATH = "openedx.core.djangoapps.theming.management.commands.create_sites_and_configurations."
def _generate_site_config(dns_name, site_domain):
def _generate_site_config(dns_name, site_domain, devstack=False):
""" Generate the site configuration for a given site """
if devstack:
lms_url_fmt = "{domain}-{dns_name}.e2e.devstack"
else:
lms_url_fmt = "{domain}-{dns_name}.sandbox.edx.org"
return {
"lms_url": "{domain}-{dns_name}.sandbox.edx.org".format(domain=site_domain, dns_name=dns_name),
"lms_url": lms_url_fmt.format(domain=site_domain, dns_name=dns_name),
"platform_name": "{domain}-{dns_name}".format(domain=site_domain, dns_name=dns_name)
}
def _get_sites(dns_name):
def _get_sites(dns_name, devstack=False):
""" Creates the mocked data for management command """
sites = {}
if devstack:
site_domain_fmt = "{site}-{dns_name}.e2e.devstack"
else:
site_domain_fmt = "{site}-{dns_name}.sandbox.edx.org"
for site in SITES:
sites.update({
site: {
"theme_dir_name": "{}_dir_name".format(site),
"configuration": _generate_site_config(dns_name, site),
"site_domain": "{site}-{dns_name}.sandbox.edx.org".format(site=site, dns_name=dns_name)
"site_domain": site_domain_fmt.format(site=site, dns_name=dns_name)
}
})
return sites
@@ -80,7 +91,7 @@ class TestCreateSiteAndConfiguration(TestCase):
self.assertEqual(len(user_profile), 1)
return service_user
def _assert_ecommerce_clients_are_valid(self):
def _assert_ecommerce_clients_are_valid(self, devstack=False):
"""
Checks that all ecommerce clients are valid
"""
@@ -89,10 +100,15 @@ class TestCreateSiteAndConfiguration(TestCase):
clients = Client.objects.filter(user=service_user)
self.assertEqual(len(clients), len(SITES))
if devstack:
ecommerce_url_fmt = u"http://ecommerce-{site_name}-{dns_name}.e2e.devstack:18130/"
else:
ecommerce_url_fmt = u"https://ecommerce-{site_name}-{dns_name}.sandbox.edx.org/"
for client in clients:
self.assertEqual(client.user.username, service_user[0].username)
site_name = client.name[:6]
ecommerce_url = "https://ecommerce-{site_name}-{dns_name}.sandbox.edx.org/".format(
ecommerce_url = ecommerce_url_fmt.format(
site_name=site_name,
dns_name=self.dns_name
)
@@ -114,22 +130,29 @@ class TestCreateSiteAndConfiguration(TestCase):
1
)
def _assert_discovery_clients_are_valid(self):
def _assert_discovery_clients_are_valid(self, devstack=False):
"""
Checks that all discovery clients are valid
"""
service_user = self._assert_service_user_is_valid("lms_catalog_service_user")
clients = Client.objects.filter(user=service_user)
self.assertEqual(len(clients), len(SITES))
if devstack:
discovery_url_fmt = u"http://discovery-{site_name}-{dns_name}.e2e.devstack:18381/"
else:
discovery_url_fmt = u"https://discovery-{site_name}-{dns_name}.sandbox.edx.org/"
for client in clients:
self.assertEqual(client.user.username, service_user[0].username)
site_name = client.name[:6]
discovery_url = "https://discovery-{site_name}-{dns_name}.sandbox.edx.org/".format(
discovery_url = discovery_url_fmt.format(
site_name=site_name,
dns_name=self.dns_name
)
self.assertEqual(client.url, discovery_url)
self.assertEqual(
client.redirect_uri,
@@ -179,3 +202,30 @@ class TestCreateSiteAndConfiguration(TestCase):
self._assert_sites_are_valid()
self._assert_discovery_clients_are_valid()
self._assert_ecommerce_clients_are_valid()
@mock.patch(MANAGEMENT_COMMAND_PATH + "Command._enable_commerce_configuration")
@mock.patch(MANAGEMENT_COMMAND_PATH + "Command._get_sites_data")
def test_with_devstack_and_dns(self, mock_get_sites, mock_commerce):
""" Test the command with dns_name """
mock_get_sites.return_value = _get_sites(self.dns_name, devstack=True)
mock_commerce.return_value = None
call_command(
"create_sites_and_configurations",
"--dns-name", self.dns_name,
"--theme-path", self.theme_path,
"--devstack"
)
self._assert_sites_are_valid()
self._assert_discovery_clients_are_valid(devstack=True)
self._assert_ecommerce_clients_are_valid(devstack=True)
call_command(
"create_sites_and_configurations",
"--dns-name", self.dns_name,
"--theme-path", self.theme_path,
"--devstack"
)
# if we run command with same dns then it will not duplicates the sites and oauth2 clients.
self._assert_sites_are_valid()
self._assert_discovery_clients_are_valid(devstack=True)
self._assert_ecommerce_clients_are_valid(devstack=True)