Skip to content

Commit

Permalink
Addressing comments and refactoring
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 5a9e878 commit 72f7f3f
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 65 deletions.
43 changes: 24 additions & 19 deletions bundle-workflow/src/test_workflow/dependency_installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,49 @@

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

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()
self.dependency_path = f"org/opensearch/{self.dependency_name}/{self.version}/"
self.maven_local_path = os.path.join(
os.path.expanduser("~"), ".m2/repository/", self.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):
def download(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))
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):
def install(self):
# s3_path = f"/builds/{self.version}/{self.build_id}/{self.arch}/maven/{self.dependency_path()}"
file_handler = MavenLocalFileHandler()
file_handler.copy(self.download(), self.maven_local_path)


class MavenLocalFileHandler:
"""
Copies given dependencies to maven local.
"""

def copy(self, dependency_from_s3, maven_local_path):
if not os.path.exists(maven_local_path):
os.makedirs(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)
else:
raise ValueError(f"No file found at path: {local_file_path}")
26 changes: 26 additions & 0 deletions bundle-workflow/tests/test_workflow/helper/test_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import os
import shutil


class TestUtils:
def get_test_dependencies():
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(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
81 changes: 35 additions & 46 deletions bundle-workflow/tests/test_workflow/test_dependency_installer.py
Original file line number Diff line number Diff line change
@@ -1,59 +1,48 @@
import os
import shutil
import tempfile
import unittest
from unittest.mock import patch

from src.test_workflow.dependency_installer import DependencyInstaller
from src.test_workflow.dependency_installer import MavenLocalFileHandler
from helper.test_utils import TestUtils


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

def test_get_dependency_path(self):
def test_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.dependency_installer.dependency_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
maven_local_path = self.dependency_installer.maven_local_path
TestUtils.clean_maven_local_path(maven_local_path)
with patch(
"src.test_workflow.dependency_installer.MavenLocalFileHandler.copy"
) as mock_maven_copy:
self.dependency_installer.maven_local_file_handler = [
MavenLocalFileHandler(),
MavenLocalFileHandler(),
]
self.dependency_installer.install()
mock_maven_copy.assert_called_with(
TestUtils.get_test_dependencies(), maven_local_path
)


class MavenLocalFileHandlerTests(unittest.TestCase):
def setUp(self):
self.maven_local_file_handler = MavenLocalFileHandler()

def test_copy(self):
maven_local_path = tempfile.mkdtemp()
test_files = TestUtils.get_test_dependencies()
self.maven_local_file_handler.copy(test_files, maven_local_path)
self.assertCountEqual(test_files, os.listdir(maven_local_path))
self.assertListEqual(test_files, os.listdir(maven_local_path))

0 comments on commit 72f7f3f

Please sign in to comment.