Exemple #1
0
    def test_build_execution_context_first_run(self, mock_ks, mock_net,
                                               mock_registry):
        fpipe = fakes.FakePipeline()
        fplan = fakes.FakePlan()
        mock_net.return_value = {'public_net': 'fake-net-id'}
        mock_registry.Plan.get_by_id.return_value = fplan
        fplan.raw_content = {
            'name':
            'theplan',
            'artifacts': [{
                'name': 'nodeus',
                'artifact_type': 'heroku',
                'content': {
                    'href': 'https://example.com/ex.git'
                },
                'language_pack': '1-2-3-4'
            }]
        }

        handler = pipeline_handler.PipelineHandler(self.ctx)

        handler._get_context_from_last_execution = mock.MagicMock(
            return_value=None)

        handler._create_empty_stack = mock.MagicMock(return_value='foo')
        url_for = mock_ks.return_value.client.service_catalog.url_for
        url_for.return_value = 'url-for'
        ex_ctx = handler._build_execution_context(fpipe)
        self.assertEqual('foo', ex_ctx['stack_id'])
        self.assertEqual('url-for', ex_ctx['build_service_url'])
        self.assertEqual('1-2-3-4', ex_ctx['base_image_id'])
        self.assertEqual('heroku', ex_ctx['source_format'])
        self.assertEqual('faker', ex_ctx['parameters']['app_name'])
        self.assertEqual('fake-net-id', ex_ctx['parameters']['public_net'])
    def test_languagepack_delete_with_plan_not_using_lp(self,
                                                        mock_app,
                                                        mock_planlist,
                                                        mock_log_handler,
                                                        mock_swift_delete,
                                                        mock_img):
        cfg.CONF.worker.image_storage = "swift"
        fi = fakes.FakeImage()
        mock_img.get_lp_by_name_or_uuid.return_value = fi
        mock_img.destroy.return_value = {}
        mock_planlist.get_all.return_value = [fakes.FakePlan()]

        mock_app.get_all_by_lp.return_value = {}
        handler = language_pack_handler.LanguagePackHandler(self.ctx)
        handler.delete('lp_name')

        mock_img.get_lp_by_name_or_uuid.assert_called_once_with(
            self.ctx, 'lp_name')
        docker_image_name = fi.docker_image_name
        img_filename = docker_image_name.split('-', 1)[1]
        mock_swift_delete.assert_called_once_with('solum_lp', img_filename)
        self.assertTrue(mock_planlist.get_all.called)
        log_handler = mock_log_handler.return_value
        log_handler.delete.assert_called_once_with(fi.uuid)
        fi.destroy.assert_called_once_with(self.ctx)
Exemple #3
0
    def test_create(self, mock_wf_insert, mock_pa, mock_registry):

        app_obj = fakes.FakeApp()
        app_id = app_obj.id
        test_cmd = app_obj.workflow_config['test_cmd']
        run_cmd = app_obj.workflow_config['run_cmd']
        mock_registry.App.get_by_id.return_value = app_obj

        workflow_data = {
            "actions": ["unittest", "build", "deploy"],
            "app_id": app_id,
            "source": app_obj.source,
            "config": app_obj.workflow_config,
            "actions": app_obj.trigger_actions
        }

        fp = fakes.FakePlan()
        mock_registry.Plan.return_value = fp

        fa = fakes.FakeAssembly()
        fa.plan_uuid = fp.uuid
        mock_registry.Assembly.return_value = fa

        wf_obj = fakes.FakeWorkflow()
        wf_obj.app_id = app_obj.id
        wf_obj.assembly = fa.id
        mock_registry.Workflow.return_value = wf_obj

        fi = fakes.FakeImage()
        mock_registry.Image.return_value = fi

        handler = workflow_handler.WorkflowHandler(self.ctx)

        res = handler.create(workflow_data,
                             commit_sha='master',
                             status_url='',
                             du_id='')
        self.assertEqual(wf_obj, res)
        git_info = {
            'source_url': app_obj.source['repository'],
            'commit_sha': app_obj.source['revision'],
            'repo_token': app_obj.source['repo_token'],
            'private': app_obj.source['private'],
            'private_ssh_key': app_obj.source['private_ssh_key'],
            'status_url': '',
        }
        mock_pa.assert_called_once_with(
            verb='launch_workflow',
            workflow=['unittest', 'build', 'deploy'],
            build_id=fa.id,
            name=fi.name,
            assembly_id=fa.id,
            git_info=git_info,
            test_cmd=test_cmd,
            ports=app_obj.ports,
            base_image_id=fi.base_image_id,
            source_format=fi.source_format,
            image_format=fi.image_format,
            run_cmd=run_cmd,
            du_id='')
Exemple #4
0
 def test_plans_post_nodata(self, handler_mock, resp_mock, request_mock):
     request_mock.body = ''
     request_mock.content_type = 'application/json'
     handler_create = handler_mock.return_value.create
     handler_create.return_value = fakes.FakePlan()
     plan.PlansController().post()
     self.assertEqual(400, resp_mock.status)
Exemple #5
0
 def test_trigger_workflow_stage_select(self, mock_kc, mock_registry):
     trigger_id = 1
     plan_obj = fakes.FakePlan()
     artifacts = [{
         "name": "Test",
         "artifact_type": "heroku",
         "content": {
             "href": "https://github.com/some/project"
         },
         "language_pack": "auto"
     }]
     plan_obj.raw_content = {"artifacts": artifacts}
     mock_registry.Plan.get_by_trigger_id.return_value = plan_obj
     handler = plan_handler.PlanHandler(self.ctx)
     handler._build_artifact = mock.MagicMock()
     handler.trigger_workflow(trigger_id, workflow=['unittest'])
     handler._build_artifact.assert_called_once_with(
         plan_obj,
         artifact=artifacts[0],
         commit_sha='',
         status_url=None,
         workflow=['unittest'],
     )
     mock_registry.Plan.get_by_trigger_id.assert_called_once_with(
         None, trigger_id)
Exemple #6
0
 def test_trigger_workflow(self, mock_registry):
     trigger_id = 1
     artifacts = [{
         "name": "Test",
         "artifact_type": "heroku",
         "content": {
             "href": "https://github.com/some/project"
         },
         "language_pack": "auto"
     }]
     db_obj = fakes.FakeAssembly()
     mock_registry.Assembly.get_by_trigger_id.return_value = db_obj
     plan_obj = fakes.FakePlan()
     mock_registry.Plan.get_by_id.return_value = plan_obj
     plan_obj.raw_content = {"artifacts": artifacts}
     handler = assembly_handler.AssemblyHandler(self.ctx)
     handler._build_artifact = mock.MagicMock()
     handler._context_from_trust_id = mock.MagicMock(return_value=self.ctx)
     handler.trigger_workflow(trigger_id)
     handler._build_artifact.assert_called_once_with(db_obj, artifacts[0])
     handler._context_from_trust_id.assert_called_once_with('trust_worthy')
     mock_registry.Assembly.get_by_trigger_id.assert_called_once_with(
         None, trigger_id)
     mock_registry.Plan.get_by_id.assert_called_once_with(
         self.ctx, db_obj.plan_id)
Exemple #7
0
 def test_plan_put_empty_yaml(self, PlanHandler, resp_mock, request_mock):
     request_mock.content_type = 'application/x-yaml'
     request_mock.body = '{}'
     hand_update = PlanHandler.return_value.update
     hand_update.return_value = fakes.FakePlan()
     plan.PlanController('test_id').put()
     self.assertEqual(400, resp_mock.status)
Exemple #8
0
 def test_plans_post_invalid_yaml(self, handler_mock, resp_mock,
                                  request_mock):
     request_mock.body = 'invalid yaml file'
     request_mock.content_type = 'application/x-yaml'
     handler_create = handler_mock.return_value.create
     handler_create.return_value = fakes.FakePlan()
     plan.PlansController().post()
     self.assertEqual(400, resp_mock.status)
Exemple #9
0
 def test_plan_delete(self, mock_kc, mock_destroy, mock_registry):
     db_obj = fakes.FakePlan()
     mock_registry.Plan.get_by_uuid.return_value = db_obj
     handler = plan_handler.PlanHandler(self.ctx)
     handler.delete('test_id')
     mock_destroy.assert_called_once_with(app_id=db_obj.id)
     mock_registry.Plan.get_by_uuid.assert_called_once_with(
         self.ctx, 'test_id')
Exemple #10
0
 def test_plans_post_version_not_found_yaml(self, PlanHandler, resp_mock,
                                            request_mock):
     request_mock.body = 'name: ex_plan1\ndescription: dsc1.'
     request_mock.content_type = 'application/x-yaml'
     hand_create = PlanHandler.return_value.create
     hand_create.return_value = fakes.FakePlan()
     plan.PlansController().post()
     self.assertEqual(400, resp_mock.status)
Exemple #11
0
 def test_plan_delete(self, mock_registry):
     db_obj = fakes.FakePlan()
     mock_registry.Plan.get_by_uuid.return_value = db_obj
     handler = plan_handler.PlanHandler()
     handler.delete('test_id')
     db_obj.destroy.assert_called_once_with(None)
     mock_registry.Plan.get_by_uuid.assert_called_once_with(None,
                                                            'test_id')
Exemple #12
0
 def test_plan_create(self, mock_kc, mock_registry):
     data = {'name': 'new_name', 'uuid': 'input_uuid'}
     db_obj = fakes.FakePlan()
     mock_registry.Plan.return_value = db_obj
     handler = plan_handler.PlanHandler(self.ctx)
     res = handler.create(data)
     db_obj.create.assert_called_once_with(self.ctx)
     self.assertEqual(db_obj, res)
    def test_assemblies_post_ref_rel_uris(self, PlanHandler, AssemblyHandler,
                                          resp_mock, request_mock):
        hand_get = PlanHandler.return_value.get
        hand_get.return_value = fakes.FakePlan()

        hand_create_from_plan = AssemblyHandler.return_value.create_from_plan
        fake_assembly = fakes.FakeAssembly()
        hand_create_from_plan.return_value = fake_assembly

        cntrl = assemblies.AssembliesController()

        # test reference to CAMP plan relative to assemblies
        ref_object = {'plan_uri':
                      '../plans/24e3974c-195d-4a6a-96b0-7924ed3c742a'}
        request_mock.content_type = 'application/json'
        request_mock.body = json.dumps(ref_object)

        resp = cntrl.post()
        self.assertIsNotNone(resp)
        self.assertEqual(201, resp_mock.status)
        self.assertIsNotNone(resp_mock.location)
        self.assertEqual(fake_assembly.name, resp['name'])

        # test reference to Solum plan relative to assemblies
        ref_object = {'plan_uri':
                      '../../../v1/plans/24e3974c-195d-4a6a-96b0-7924ed3c742a'}
        request_mock.content_type = 'application/json'
        request_mock.body = json.dumps(ref_object)

        resp = cntrl.post()
        self.assertIsNotNone(resp)
        self.assertEqual(201, resp_mock.status)
        self.assertIsNotNone(resp_mock.location)
        self.assertEqual(fake_assembly.name, resp['name'])

        # test reference to CAMP plan relative to root
        ref_object = {'plan_uri':
                      '/camp/v1_1/plans/24e3974c-195d-4a6a-96b0-7924ed3c742a'}
        request_mock.content_type = 'application/json'
        request_mock.body = json.dumps(ref_object)

        resp = cntrl.post()
        self.assertIsNotNone(resp)
        self.assertEqual(201, resp_mock.status)
        self.assertIsNotNone(resp_mock.location)
        self.assertEqual(fake_assembly.name, resp['name'])

        # test reference to Solum plan relative to root
        ref_object = {'plan_uri':
                      '/v1/plans/24e3974c-195d-4a6a-96b0-7924ed3c742a'}
        request_mock.content_type = 'application/json'
        request_mock.body = json.dumps(ref_object)

        resp = cntrl.post()
        self.assertIsNotNone(resp)
        self.assertEqual(201, resp_mock.status)
        self.assertIsNotNone(resp_mock.location)
        self.assertEqual(fake_assembly.name, resp['name'])
Exemple #14
0
 def test_plan_put_version_not_found_json(self, PlanHandler, resp_mock,
                                          request_mock):
     data = {'name': 'foo'}
     request_mock.body = json.dumps(data)
     request_mock.content_type = 'application/json'
     hand_update = PlanHandler.return_value.update
     hand_update.return_value = fakes.FakePlan()
     plan.PlanController('test_id').put()
     self.assertEqual(400, resp_mock.status)
Exemple #15
0
 def test_plans_post_yaml(self, PlanHandler, resp_mock, request_mock):
     request_mock.body = 'version: 1\nname: ex_plan1\ndescription: dsc1.'
     request_mock.content_type = 'application/x-yaml'
     hand_create = PlanHandler.return_value.create
     hand_create.return_value = fakes.FakePlan()
     plan.PlansController().post()
     hand_create.assert_called_with({'name': 'ex_plan1',
                                     'description': 'dsc1.'})
     self.assertEqual(201, resp_mock.status)
Exemple #16
0
 def test_plan_put_invalid_yaml(self, PlanHandler, resp_mock, request_mock,
                                mock_policy):
     mock_policy.return_value = True
     request_mock.content_type = 'application/x-yaml'
     request_mock.body = 'invalid yaml file'
     hand_update = PlanHandler.return_value.update
     hand_update.return_value = fakes.FakePlan()
     plan.PlanController('test_id').put()
     self.assertEqual(400, resp_mock.status)
Exemple #17
0
 def test_plans_post_version_not_found_json(self, PlanHandler, resp_mock,
                                            request_mock):
     json_update = {'name': 'foo'}
     request_mock.body = json.dumps(json_update)
     request_mock.content_type = 'application/json'
     hand_create = PlanHandler.return_value.create
     hand_create.return_value = fakes.FakePlan()
     plan.PlansController().post()
     self.assertEqual(400, resp_mock.status)
Exemple #18
0
 def test_plan_put_version_not_found_yaml(self, PlanHandler, resp_mock,
                                          request_mock):
     data = 'name: ex_plan1\ndescription: yaml plan1.'
     request_mock.body = data
     request_mock.content_type = 'application/x-yaml'
     hand_update = PlanHandler.return_value.update
     hand_update.return_value = fakes.FakePlan()
     plan.PlanController('test_id').put()
     self.assertEqual(400, resp_mock.status)
Exemple #19
0
 def test_plans_post_empty_yaml(self, handler_mock, resp_mock, request_mock,
                                mock_policy):
     mock_policy.return_value = True
     request_mock.body = '{}'
     request_mock.content_type = 'application/x-yaml'
     handler_create = handler_mock.return_value.create
     handler_create.return_value = fakes.FakePlan()
     plan.PlansController().post()
     self.assertEqual(400, resp_mock.status)
Exemple #20
0
 def test_plan_put_ok_yaml(self, PlanHandler, resp_mock, request_mock):
     data = 'version: 1\nname: ex_plan1\ndescription: dsc1.'
     request_mock.body = data
     request_mock.content_type = 'application/x-yaml'
     hand_update = PlanHandler.return_value.update
     hand_update.return_value = fakes.FakePlan()
     plan.PlanController('test_id').put()
     hand_update.assert_called_with('test_id', {'name': 'ex_plan1',
                                                'description': u'dsc1.'})
     self.assertEqual(200, resp_mock.status)
Exemple #21
0
 def test_plan_update(self, mock_registry):
     data = {'user_id': 'new_user_id'}
     db_obj = fakes.FakePlan()
     mock_registry.Plan.get_by_uuid.return_value = db_obj
     handler = plan_handler.PlanHandler()
     res = handler.update('test_id', data)
     self.assertEqual(db_obj.user_id, res.user_id)
     db_obj.save.assert_called_once_with(None)
     mock_registry.Plan.get_by_uuid.assert_called_once_with(None,
                                                            'test_id')
Exemple #22
0
 def test_plans_get_all_json(self, PlanHandler, resp_mock, request_mock):
     hand_get = PlanHandler.return_value.get_all
     fake_plan = fakes.FakePlan()
     hand_get.return_value = [fake_plan]
     resp = plan.PlansController().get_all()
     self.assertIsNotNone(resp)
     resp_json = json.loads(resp)
     self.assertEqual(fake_plan.raw_content['name'], resp_json[0]['name'])
     self.assertEqual(200, resp_mock.status)
     hand_get.assert_called_with()
Exemple #23
0
 def test_plan_get(self, PlanHandler, resp_mock, request_mock):
     hand_get = PlanHandler.return_value.get
     fake_plan = fakes.FakePlan()
     hand_get.return_value = fake_plan
     cont = plan.PlanController('test_id')
     resp = cont.get()
     self.assertIsNotNone(resp)
     resp_yml = yaml.load(resp)
     self.assertEqual(fake_plan.raw_content['name'], resp_yml['name'])
     hand_get.assert_called_with('test_id')
     self.assertEqual(200, resp_mock.status)
Exemple #24
0
 def test_plan_put_ok_json(self, PlanHandler, resp_mock, request_mock,
                           mock_policy):
     mock_policy.return_value = True
     data = {'name': 'foo', 'version': '1'}
     request_mock.body = json.dumps(data)
     request_mock.content_type = 'application/json'
     hand_update = PlanHandler.return_value.update
     hand_update.return_value = fakes.FakePlan()
     plan.PlanController('test_id').put()
     hand_update.assert_called_with('test_id', {'name': 'foo'})
     self.assertEqual(200, resp_mock.status)
Exemple #25
0
 def test_plans_post_json(self, PlanHandler, resp_mock, request_mock,
                          mock_policy):
     mock_policy.return_value = True
     json_update = {'name': 'foo', 'version': '1'}
     request_mock.body = json.dumps(json_update)
     request_mock.content_type = 'application/json'
     hand_create = PlanHandler.return_value.create
     hand_create.return_value = fakes.FakePlan()
     plan.PlansController().post()
     hand_create.assert_called_with({'name': 'foo'})
     self.assertEqual(201, resp_mock.status)
Exemple #26
0
 def test_plans_get_all_yaml(self, PlanHandler, resp_mock, request_mock):
     hand_get = PlanHandler.return_value.get_all
     request_mock.accept = 'application/x-yaml'
     fake_plan = fakes.FakePlan()
     hand_get.return_value = [fake_plan]
     resp = plan.PlansController().get_all()
     self.assertIsNotNone(resp)
     resp_yml = yaml.load(resp)
     self.assertEqual(fake_plan.raw_content['name'], resp_yml[0]['name'])
     self.assertEqual(200, resp_mock.status)
     hand_get.assert_called_with()
Exemple #27
0
    def test_plan_delete_dberror(self, PlanHandler, resp_mock, request_mock):
        hand_get = PlanHandler.return_value.get
        fake_plan = fakes.FakePlan()
        hand_get.return_value = fake_plan

        hand_delete = PlanHandler.return_value.delete
        hand_delete.side_effect = db_exc.DBError()
        obj = plan.PlanController('test_id')
        obj.delete()
        hand_delete.assert_called_with('test_id')
        self.assertEqual(409, resp_mock.status)
Exemple #28
0
    def test_create_with_private_github_repo(self, mock_kc, mock_pa,
                                             mock_registry):
        data = {
            'user_id': 'new_user_id',
            'uuid': 'input_uuid',
            'plan_uuid': 'input_plan_uuid'
        }

        db_obj = fakes.FakeAssembly()
        mock_registry.Assembly.return_value = db_obj
        fp = fakes.FakePlan()
        mock_registry.Plan.get_by_id.return_value = fp
        fp.raw_content = {
            'name':
            'theplan',
            'artifacts': [{
                'name': 'nodeus',
                'artifact_type': 'heroku',
                'content': {
                    'private': True,
                    'href': 'https://example.com/ex.git',
                    'public_key': 'ssh-rsa abc'
                },
                'language_pack': 'auto'
            }]
        }
        fp.deploy_keys_uri = 'secret_ref_uri'
        mock_registry.Image.return_value = fakes.FakeImage()

        handler = assembly_handler.AssemblyHandler(self.ctx)
        res = handler.create(data)
        db_obj.update.assert_called_once_with(data)
        db_obj.create.assert_called_once_with(self.ctx)
        self.assertEqual(db_obj, res)
        git_info = {
            'source_url': "https://example.com/ex.git",
            'commit_sha': '',
            'repo_token': None,
            'status_url': None,
        }
        mock_pa.assert_called_once_with(
            verb='launch_workflow',
            workflow=['unittest', 'build', 'deploy'],
            build_id=8,
            name='nodeus',
            assembly_id=8,
            git_info=git_info,
            ports=[80],
            test_cmd=None,
            base_image_id='auto',
            source_format='heroku',
            image_format='qcow2',
            run_cmd=None)
Exemple #29
0
    def test_plans_get(self, PlanHandler, resp_mock, request_mock):
        hand_get_all = PlanHandler.return_value.get_all
        fake_plan = fakes.FakePlan()
        hand_get_all.return_value = [fake_plan]

        resp = plans.PlansController().get()
        self.assertIsNotNone(resp)
        self.assertEqual(200, resp_mock.status)
        self.assertIsNotNone(resp['result'].plan_links)
        plan_links = resp['result'].plan_links
        self.assertEqual(1, len(plan_links))
        self.assertEqual(fake_plan.name, plan_links[0].target_name)
Exemple #30
0
    def test_plan_put_bad_names(self, PlanHandler, resp_mock, request_mock):
        request_mock.content_type = 'application/x-yaml'
        hand_update = PlanHandler.return_value.update
        hand_update.return_value = fakes.FakePlan()
        pc = plan.PlanController('test_id')
        request_mock.body = 'version: 1\nname: %s' % ('a' * 101)
        pc.put()
        self.assertEqual(400, resp_mock.status)

        request_mock.body = 'version: 1\nname: %s' % ('name with spaces')
        pc.put()
        self.assertEqual(400, resp_mock.status)