Skip to content

Commit

Permalink
Added DependencyInstaller to copy dependencies from s3 to maven local
Browse files Browse the repository at this point in the history
Signed-off-by: Vacha <[email protected]>
  • Loading branch information
VachaShah committed Aug 26, 2021
1 parent a7e0d77 commit b189896
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 0 deletions.
47 changes: 47 additions & 0 deletions bundle-workflow/src/test_workflow/dependency_installer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import os
import shutil


class DependencyInstaller:
"""
Provides functionality to copy the maven dependencies from S3 to maven local to be used by tests.
"""

def __init__(self, build_id, dependency_name, version, arch):
self.build_id = build_id
self.dependency_name = dependency_name
self.version = version
self.arch = arch

def get_dependency_path(self):
return f"org/opensearch/{self.dependency_name}/{self.version}/"

def get_maven_local_path(self):
return os.path.join(
os.path.expanduser("~"), ".m2/repository/", self.get_dependency_path()
)

# TODO: This is currently a stubbed function which returns files from the current directory,
# to be replaced after it is implemented
def download_from_s3(self):
return [
file_name
for file_name in os.listdir(os.path.dirname(os.path.abspath(__file__)))
if os.path.isfile(os.path.join(os.path.dirname(os.path.abspath(__file__)), file_name))
]

def copy_to_maven_local(self, dependency_from_s3, maven_local_path):
for file_name in dependency_from_s3:
local_file_path = os.path.join(
os.path.dirname(os.path.abspath(__file__)), file_name
)
if os.path.isfile(local_file_path):
shutil.copy(local_file_path, maven_local_path)

def install(self):
# s3_path = f"/builds/{self.version}/{self.build_id}/{self.arch}/maven/{self.get_dependency_path()}"
maven_local_path = self.get_maven_local_path()
if not os.path.exists(maven_local_path):
os.makedirs(maven_local_path)
dependency_from_s3 = self.download_from_s3()
self.copy_to_maven_local(dependency_from_s3, maven_local_path)
59 changes: 59 additions & 0 deletions bundle-workflow/tests/test_workflow/test_dependency_installer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import os
import shutil
import unittest

from src.test_workflow.dependency_installer import DependencyInstaller


class DependencyInstallerTests(unittest.TestCase):
dependency_installer = DependencyInstaller("7", "job-scheduler", "1.1.0.0", "arm64")

def test_get_dependency_path(self):
self.assertEqual(
"org/opensearch/job-scheduler/1.1.0.0/",
self.dependency_installer.get_dependency_path(),
)

def test_copy_to_maven_local(self):
dependency_from_s3 = self.get_test_dependencies()
maven_local_path = self.dependency_installer.get_maven_local_path()
if not os.path.exists(maven_local_path):
os.makedirs(maven_local_path)
else:
self.clean_maven_local_path(maven_local_path)
self.dependency_installer.copy_to_maven_local(
dependency_from_s3, maven_local_path
)
self.assertCountEqual(dependency_from_s3, os.listdir(maven_local_path))
self.assertListEqual(dependency_from_s3, os.listdir(maven_local_path))

def test_install(self):
maven_local_path = self.dependency_installer.get_maven_local_path()
self.clean_maven_local_path(maven_local_path)
self.dependency_installer.install()
self.assertCountEqual(
self.get_test_dependencies(), os.listdir(maven_local_path)
)
self.assertListEqual(self.get_test_dependencies(), os.listdir(maven_local_path))

def get_test_dependencies(self):
test_dir = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "../../src/test_workflow"
)
return [
file_name
for file_name in os.listdir(test_dir)
if os.path.isfile(os.path.join(test_dir, file_name))
]

def clean_maven_local_path(self, maven_local_path):
for file_name in os.listdir(maven_local_path):
local_file_path = os.path.join(maven_local_path, file_name)
try:
if os.path.isfile(local_file_path) or os.path.islink(local_file_path):
os.unlink(local_file_path)
elif os.path.isdir(local_file_path):
shutil.rmtree(local_file_path)
except OSError as e:
print(f"Failed to clean {local_file_path}. Reason: {e}")
raise

0 comments on commit b189896

Please sign in to comment.