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

Commit 3bd5e2e

Browse files
author
Steve Smith
committed
Merge pull request #32 from hmrc/assets-download-fix
Assets download fix for running from profiles
2 parents aa6b771 + 8caed41 commit 3bd5e2e

File tree

4 files changed

+47
-8
lines changed

4 files changed

+47
-8
lines changed

servicemanager/service/smplayservice.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/usr/bin/env python
2+
import glob
23

34
import os
5+
import re
46
import shutil
57
import zipfile
68
import stat
@@ -24,12 +26,6 @@ class SmPlayServiceStarter(SmJvmServiceStarter):
2426

2527
PLAY_PROCESS_STARTUP_TIMEOUT_SECONDS = 120
2628

27-
def __init__(self, context, service_name, run_from, port, classifier, service_mapping_ports, version, proxy, append_args):
28-
SmMicroServiceStarter.__init__(self, context, service_name, "play", run_from, port, classifier, service_mapping_ports, version, proxy, append_args)
29-
30-
if not self.port:
31-
self.port = self.service_data["defaultPort"]
32-
3329
def _build_extra_params(self):
3430
extra_params = ["-Dhttp.port=%d" % self.port]
3531
extra_params += self.process_arguments()
@@ -70,6 +66,12 @@ def _build_extra_params(self):
7066

7167
return extra_params
7268

69+
def __init__(self, context, service_name, run_from, port, classifier, service_mapping_ports, version, proxy, append_args):
70+
SmMicroServiceStarter.__init__(self, context, service_name, "play", run_from, port, classifier, service_mapping_ports, version, proxy, append_args)
71+
72+
if not self.port:
73+
self.port = self.service_data["defaultPort"]
74+
7375
def supports_append_args(self):
7476
return True
7577

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

100+
if "frontend" in self.service_data and self.service_data["frontend"]:
101+
assets_versions = self._get_assets_version(unzip_dir)
102+
self.context.assets_versions_to_start(assets_versions)
103+
98104
cmd_with_params = self.get_start_command("BINARY")
99105
if os.path.exists(cmd_with_params[0]):
100106
os.chmod(cmd_with_params[0], stat.S_IRWXU)
@@ -156,6 +162,15 @@ def start_from_sources(self):
156162
print b.fail + "ERROR: could not start '" + self.service_name + "' " + b.endc
157163
return process.pid # Note: This is the parent pid
158164

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

160175
class SmPlayService(SmJvmService):
161176

servicemanager/service/smpythonservice.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,13 @@ def _start_from_binary(self):
4040

4141
if not self.context.offline:
4242
nexus = SmNexus(self.context, self.service_name)
43-
versions = nexus.get_all_versions(self.run_from)
43+
44+
if self.context.assets_versions:
45+
versions = self.context.assets_versions
46+
self.log("Starting assets versions: %s" % (", ".join(versions)))
47+
else:
48+
versions = nexus.get_all_versions(self.run_from)
49+
4450
for version in versions:
4551
nexus.download_jar_if_necessary(self.run_from, version)
4652
self._unzip_assets(versions)
@@ -177,4 +183,4 @@ def is_started_on_default_port(self):
177183
return len(SmProcess.processes_matching(SmPythonService.get_pattern(self))) > 0
178184

179185
def get_pattern(self):
180-
return self.service_data["pattern"]
186+
return self.service_data["pattern"]

servicemanager/serviceresolver.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def resolve_services(self, service_name):
1212
def resolve_services_from_array(self, services):
1313
services_to_start = []
1414
services_to_not_start = []
15+
1516
for service_name in services:
1617
if service_name.startswith('-'):
1718
services_to_not_start += self.resolve_services(service_name[1:])
@@ -28,9 +29,19 @@ def resolve_services_from_array(self, services):
2829
services_to_start.remove(not_start)
2930
return services_to_start
3031

32+
def _find_assets_service_name(self, service_name):
33+
assets_service_name = ''
34+
for service_name in self.application.services:
35+
if self.application.services[service_name]['type'] == 'assets':
36+
assets_service_name = service_name
37+
return assets_service_name
38+
3139
def _get_all_in_profile(self, profile_name):
3240
services = []
3341
services_to_not_start = []
42+
43+
assets_service_name = self._find_assets_service_name(profile_name)
44+
3445
for service_name in self.application.services_for_profile(profile_name):
3546
if service_name.startswith('-'):
3647
services_to_not_start += self._all_matching(service_name[1:])
@@ -43,6 +54,9 @@ def _get_all_in_profile(self, profile_name):
4354
for not_start in services_to_not_start:
4455
if not_start in services:
4556
services.remove(not_start)
57+
if assets_service_name in services:
58+
services.remove(assets_service_name)
59+
services.append(assets_service_name)
4660
return services
4761

4862
def _all_matching(self, wildcard):

servicemanager/smcontext.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ def __init__(self, application, test_id, offline=False, show_progress=True, requ
188188
self.features = unify_lists(request_specific_features, self.application.features)
189189
self.credentials = CredentialsResolver(self)
190190
self.process_manager = application.process_manager
191+
self.assets_versions = []
191192

192193
def config_value(self, key, default=None):
193194
if key in self.application.config:
@@ -257,6 +258,9 @@ def get_jar_filename(self, service_name, run_from):
257258
extension = self._create_extension(service_name, run_from)
258259
return artifact + extension
259260

261+
def assets_versions_to_start(self, version):
262+
self.assets_versions = self.assets_versions + version
263+
260264
def kill(self, service_name=None):
261265
if service_name:
262266
self._kill_service(service_name)

0 commit comments

Comments
 (0)