def test_write_file(self): content = "Hello world" pu.write_file('testfile1.txt', content) pu.write_file('testfile2.txt') with open('testfile1.txt', 'r') as f: self.assertEqual(f.read(), "Hello world") with open('testfile2.txt', 'r') as f: self.assertEqual(f.read(), '')
def test_docker_build(self): pu.write_file( '/tmp/test_folder/Dockerfile', """ FROM debian:stable-slim RUN apt-get update && \ apt-get install curl -y && \ apt-get clean -y """) self.runner.docker_build('abcd:latest', '/tmp/test_folder') res = self.docker_client.images.get('abcd:latest')
def test_vagrant_start(self): os.makedirs('/tmp/test_folder/test_vm') vagrantfile_content = """ Vagrant.configure("2") do |config| config.vm.box = "ailispaw/barge" end """ pu.write_file('/tmp/test_folder/test_vm/Vagrantfile', vagrantfile_content) self.runner.vagrant_start('/tmp/test_folder/test_vm') self.assertEqual( self.runner.vagrant_exists('/tmp/test_folder/test_vm'), True) vagrant.Vagrant(root='/tmp/test_folder/test_vm').halt() vagrant.Vagrant(root='/tmp/test_folder/test_vm').destroy()
def vagrant_write_vagrantfile(self, vagrant_box_path): """Bootstrap the Vagrantfile required to start the VM. Args: vagrant_box_path (str): The path to Vagrant VM's root. """ if self.dry_run: return if not os.path.exists(vagrant_box_path): os.makedirs(vagrant_box_path) vagrantfile_content = VagrantRunner.vagrantfile_content.format( os.environ['HOME'], os.environ['HOME'], self.workspace, self.workspace) pu.write_file(os.path.join(vagrant_box_path, 'Vagrantfile'), vagrantfile_content)
def test_check_secrets(self): os.environ['SECRET_ONE'] = '1234' os.environ['SECRET_TWO'] = '5678' pu.write_file( '/tmp/test_folder/a.workflow', """ workflow "sample" { resolves = "a" } action "a" { uses = "popperized/bin/sh@master" args = ["ls -ltr"] secrets = ["SECRET_ONE", "SECRET_TWO"] } """) wf = Workflow('/tmp/test_folder/a.workflow') wf.parse() WorkflowRunner.check_secrets(wf, False, False) WorkflowRunner.check_secrets(wf, True, False) WorkflowRunner.check_secrets(wf, False, True) os.environ.pop('SECRET_ONE') pu.write_file( '/tmp/test_folder/a.workflow', """ workflow "sample" { resolves = "a" } action "a" { uses = "popperized/bin/sh@master" args = ["ls -ltr"] secrets = ["SECRET_ONE", "SECRET_TWO"] } """) wf = Workflow('/tmp/test_folder/a.workflow') wf.parse() os.environ['CI'] = 'false' with patch('getpass.getpass', return_value='1234') as fake_input: WorkflowRunner.check_secrets(wf, False, False) os.environ['CI'] = 'true' os.environ.pop('SECRET_ONE') self.assertRaises(SystemExit, WorkflowRunner.check_secrets, wf, False, False)
def setUp(self): os.makedirs('/tmp/test_folder') os.chdir('/tmp/test_folder') log.setLevel('CRITICAL') workflow = """ workflow "sample" { resolves = "sample action" } action "sample action" { uses = "sh" args = ["echo", "Hello"] } """ pu.write_file('/tmp/test_folder/a.workflow', workflow) self.wf = Workflow('/tmp/test_folder/a.workflow') self.wf.parse() WorkflowRunner.instantiate_runners('docker', self.wf, '/tmp/test_folder', False, False, '12345')
def test_download_actions(self): pu.write_file( '/tmp/test_folder/a.workflow', """ workflow "sample" { resolves = "a" } action "a" { uses = "popperized/bin/sh@master" } action "b" { uses = "popperized/ansible@master" } """) wf = Workflow('/tmp/test_folder/a.workflow') wf.parse() # Download actions in the default cache directory. WorkflowRunner.download_actions(wf, False, False, '12345') self.assertEqual( os.path.exists(os.environ['HOME'] + '/.cache/.popper/actions/12345/github.com'), True) # Download actions in custom cache directory os.environ['POPPER_CACHE_DIR'] = '/tmp/somedir' WorkflowRunner.download_actions(wf, False, False, '12345') self.assertEqual( os.path.exists('/tmp/somedir/actions/12345/github.com'), True) os.environ.pop('POPPER_CACHE_DIR') # Release resources. shutil.rmtree('/tmp/somedir') shutil.rmtree(os.environ['HOME'] + '/.cache/.popper/actions/12345/github.com') # Test with skipclone flag when action not present in cache. self.assertRaises(SystemExit, WorkflowRunner.download_actions, wf, False, True, '12345')
def setUp(self): os.makedirs('/tmp/test_folder') os.chdir('/tmp/test_folder') log.setLevel('CRITICAL') workflow = """ workflow "sample" { resolves = "sample action" } action "sample action" { uses = "popperized/bin/sh@master" args = ["echo", "Hello"] } """ pu.write_file('/tmp/test_folder/a.workflow', workflow) self.wf = Workflow('/tmp/test_folder/a.workflow') self.wf.parse() WorkflowRunner.download_actions(self.wf, False, False, '12345') WorkflowRunner.instantiate_runners('vagrant', self.wf, '/tmp/test_folder', False, False, '12345') self.runner = self.wf.action['sample action']['runner'] VagrantRunner.setup_vagrant_cache('12345')
def test_get_workflow_env(self): pu.write_file( '/tmp/test_folder/a.workflow', """ workflow "sample" { resolves = "a" } action "a" { uses = "sh" } """) wf = Workflow('/tmp/test_folder/a.workflow') wf.parse() env = WorkflowRunner.get_workflow_env(wf, '/tmp/test_folder') self.assertDictEqual( env, { 'HOME': os.environ['HOME'], 'GITHUB_WORKFLOW': 'sample', 'GITHUB_ACTION': '', 'GITHUB_ACTOR': 'popper', 'GITHUB_REPOSITORY': 'unknown', 'GITHUB_EVENT_NAME': 'push', 'GITHUB_EVENT_PATH': '/tmp/github_event.json', 'GITHUB_WORKSPACE': '/tmp/test_folder', 'GITHUB_SHA': 'unknown', 'GITHUB_REF': 'unknown', 'POPPER_WORKFLOW': 'sample', 'POPPER_ACTION': '', 'POPPER_ACTOR': 'popper', 'POPPER_REPOSITORY': 'unknown', 'POPPER_EVENT_NAME': 'push', 'POPPER_EVENT_PATH': '/tmp/github_event.json', 'POPPER_WORKSPACE': '/tmp/test_folder', 'POPPER_SHA': 'unknown', 'POPPER_REF': 'unknown' })
def test_instantiate_runners(self): pu.write_file( '/tmp/test_folder/a.workflow', """ workflow "sample" { resolves = "a" } action "a" { uses = "sh" args = "ls" } """) wf = Workflow('/tmp/test_folder/a.workflow') wf.parse() env = WorkflowRunner.get_workflow_env(wf, '/tmp/test_folder') WorkflowRunner.instantiate_runners('docker', wf, '/tmp/test_folder', False, False, '12345') self.assertIsInstance(wf.action['a']['runner'], HostRunner) os.makedirs('/tmp/test_folder/actions/sample') pu.write_file('/tmp/test_folder/actions/sample/entrypoint.sh') pu.write_file('/tmp/test_folder/actions/sample/README.md') pu.write_file( '/tmp/test_folder/a.workflow', """ workflow "sample" { resolves = "a" } action "a" { uses = "./actions/sample" } """) wf = Workflow('/tmp/test_folder/a.workflow') wf.parse() env = WorkflowRunner.get_workflow_env(wf, '/tmp/test_folder') WorkflowRunner.instantiate_runners('singularity', wf, '/tmp/test_folder', False, False, '12345') self.assertIsInstance(wf.action['a']['runner'], HostRunner) pu.write_file( '/tmp/test_folder/a.workflow', """ workflow "sample" { resolves = "a" } action "a" { uses = "popperized/bin/sh@master" } """) wf = Workflow('/tmp/test_folder/a.workflow') wf.parse() env = WorkflowRunner.get_workflow_env(wf, '/tmp/test_folder') WorkflowRunner.instantiate_runners('singularity', wf, '/tmp/test_folder', False, False, '12345') self.assertIsInstance(wf.action['a']['runner'], SingularityRunner) WorkflowRunner.instantiate_runners('docker', wf, '/tmp/test_folder', False, False, '12345') self.assertIsInstance(wf.action['a']['runner'], DockerRunner) WorkflowRunner.instantiate_runners('vagrant', wf, '/tmp/test_folder', False, False, '12345') self.assertIsInstance(wf.action['a']['runner'], VagrantRunner)
def test_singularity_rm(self): pu.write_file('/tmp/test_folder/testimg.sif', 'fake image file') self.runner.singularity_rm('/tmp/test_folder/testimg.sif') self.assertEqual( self.runner.singularity_exists('/tmp/test_folder/testimg.sif'), False)