Skip to content
This repository has been archived by the owner on Oct 3, 2023. It is now read-only.

Commit

Permalink
Merge pull request #32 from hmrc/assets-download-fix
Browse files Browse the repository at this point in the history
Assets download fix for running from profiles
  • Loading branch information
Steve Smith committed May 11, 2015
2 parents aa6b771 + 8caed41 commit 3bd5e2e
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 8 deletions.
27 changes: 21 additions & 6 deletions servicemanager/service/smplayservice.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/usr/bin/env python
import glob

import os
import re
import shutil
import zipfile
import stat
Expand All @@ -24,12 +26,6 @@ class SmPlayServiceStarter(SmJvmServiceStarter):

PLAY_PROCESS_STARTUP_TIMEOUT_SECONDS = 120

def __init__(self, context, service_name, run_from, port, classifier, service_mapping_ports, version, proxy, append_args):
SmMicroServiceStarter.__init__(self, context, service_name, "play", run_from, port, classifier, service_mapping_ports, version, proxy, append_args)

if not self.port:
self.port = self.service_data["defaultPort"]

def _build_extra_params(self):
extra_params = ["-Dhttp.port=%d" % self.port]
extra_params += self.process_arguments()
Expand Down Expand Up @@ -70,6 +66,12 @@ def _build_extra_params(self):

return extra_params

def __init__(self, context, service_name, run_from, port, classifier, service_mapping_ports, version, proxy, append_args):
SmMicroServiceStarter.__init__(self, context, service_name, "play", run_from, port, classifier, service_mapping_ports, version, proxy, append_args)

if not self.port:
self.port = self.service_data["defaultPort"]

def supports_append_args(self):
return True

Expand All @@ -95,6 +97,10 @@ def start_from_binary(self):
parent, _ = os.path.split(unzip_dir)
force_pushdir(parent)

if "frontend" in self.service_data and self.service_data["frontend"]:
assets_versions = self._get_assets_version(unzip_dir)
self.context.assets_versions_to_start(assets_versions)

cmd_with_params = self.get_start_command("BINARY")
if os.path.exists(cmd_with_params[0]):
os.chmod(cmd_with_params[0], stat.S_IRWXU)
Expand Down Expand Up @@ -156,6 +162,15 @@ def start_from_sources(self):
print b.fail + "ERROR: could not start '" + self.service_name + "' " + b.endc
return process.pid # Note: This is the parent pid

def _get_assets_version(self, unzip_dir):
assets_versions = []
for conf_file in glob.glob(unzip_dir + "/conf/*.conf"):
with file(conf_file) as conf:
conf = conf.read()
conf_string = "".join(conf.split())
pattern = re.compile(ur'Prod.*assets.*version="([0-9.]*)"')
assets_versions = assets_versions + re.findall(pattern, conf_string)
return assets_versions

class SmPlayService(SmJvmService):

Expand Down
10 changes: 8 additions & 2 deletions servicemanager/service/smpythonservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,13 @@ def _start_from_binary(self):

if not self.context.offline:
nexus = SmNexus(self.context, self.service_name)
versions = nexus.get_all_versions(self.run_from)

if self.context.assets_versions:
versions = self.context.assets_versions
self.log("Starting assets versions: %s" % (", ".join(versions)))
else:
versions = nexus.get_all_versions(self.run_from)

for version in versions:
nexus.download_jar_if_necessary(self.run_from, version)
self._unzip_assets(versions)
Expand Down Expand Up @@ -177,4 +183,4 @@ def is_started_on_default_port(self):
return len(SmProcess.processes_matching(SmPythonService.get_pattern(self))) > 0

def get_pattern(self):
return self.service_data["pattern"]
return self.service_data["pattern"]
14 changes: 14 additions & 0 deletions servicemanager/serviceresolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def resolve_services(self, service_name):
def resolve_services_from_array(self, services):
services_to_start = []
services_to_not_start = []

for service_name in services:
if service_name.startswith('-'):
services_to_not_start += self.resolve_services(service_name[1:])
Expand All @@ -28,9 +29,19 @@ def resolve_services_from_array(self, services):
services_to_start.remove(not_start)
return services_to_start

def _find_assets_service_name(self, service_name):
assets_service_name = ''
for service_name in self.application.services:
if self.application.services[service_name]['type'] == 'assets':
assets_service_name = service_name
return assets_service_name

def _get_all_in_profile(self, profile_name):
services = []
services_to_not_start = []

assets_service_name = self._find_assets_service_name(profile_name)

for service_name in self.application.services_for_profile(profile_name):
if service_name.startswith('-'):
services_to_not_start += self._all_matching(service_name[1:])
Expand All @@ -43,6 +54,9 @@ def _get_all_in_profile(self, profile_name):
for not_start in services_to_not_start:
if not_start in services:
services.remove(not_start)
if assets_service_name in services:
services.remove(assets_service_name)
services.append(assets_service_name)
return services

def _all_matching(self, wildcard):
Expand Down
4 changes: 4 additions & 0 deletions servicemanager/smcontext.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ def __init__(self, application, test_id, offline=False, show_progress=True, requ
self.features = unify_lists(request_specific_features, self.application.features)
self.credentials = CredentialsResolver(self)
self.process_manager = application.process_manager
self.assets_versions = []

def config_value(self, key, default=None):
if key in self.application.config:
Expand Down Expand Up @@ -257,6 +258,9 @@ def get_jar_filename(self, service_name, run_from):
extension = self._create_extension(service_name, run_from)
return artifact + extension

def assets_versions_to_start(self, version):
self.assets_versions = self.assets_versions + version

def kill(self, service_name=None):
if service_name:
self._kill_service(service_name)
Expand Down

0 comments on commit 3bd5e2e

Please sign in to comment.