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 b189896 commit 85739e2
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 71 deletions.
48 changes: 24 additions & 24 deletions bundle-workflow/src/test_workflow/dependency_installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,44 @@

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))
]

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(
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)
# s3_path = f"/builds/{self.version}/{self.build_id}/{self.arch}/maven/{self.dependency_path()}"
file_handler = self.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):
os.makedirs(maven_local_path, exist_ok=True)
for file_name in dependency_from_s3:
local_file_path = os.path.join(
os.path.dirname(os.path.abspath(__file__)), file_name
)
shutil.copy(local_file_path, maven_local_path)
13 changes: 13 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,13 @@
import os


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))
]
82 changes: 35 additions & 47 deletions bundle-workflow/tests/test_workflow/test_dependency_installer.py
Original file line number Diff line number Diff line change
@@ -1,59 +1,47 @@
import os
import shutil
import tempfile
import unittest
from unittest.mock import patch

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

from test_workflow.dependency_installer import DependencyInstaller


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
with patch(
"test_workflow.dependency_installer.DependencyInstaller.MavenLocalFileHandler.copy"
) as mock_maven_copy:
self.dependency_installer.maven_local_file_handler = [
DependencyInstaller.MavenLocalFileHandler(),
DependencyInstaller.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 = DependencyInstaller.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 85739e2

Please sign in to comment.