Exemple #1
0
class TestOmitTargetedParameter(TestCaseWithFactory):
    """Test all values for the omit_targeted search parameter."""

    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestOmitTargetedParameter, self).setUp()
        self.owner = self.factory.makePerson()
        with person_logged_in(self.owner):
            self.distro = self.factory.makeDistribution(name='mebuntu')
        self.release = self.factory.makeDistroSeries(name='inkanyamba',
                                                     distribution=self.distro)
        self.bug = self.factory.makeBugTask(target=self.release)
        self.webservice = LaunchpadWebServiceCaller('launchpad-library',
                                                    'salgado-change-anything')

    def test_omit_targeted_old_default_true(self):
        response = self.webservice.named_get('/mebuntu/inkanyamba',
                                             'searchTasks',
                                             api_version='1.0').jsonBody()
        self.assertEqual(response['total_size'], 0)

    def test_omit_targeted_new_default_false(self):
        response = self.webservice.named_get('/mebuntu/inkanyamba',
                                             'searchTasks',
                                             api_version='devel').jsonBody()
        self.assertEqual(response['total_size'], 1)
class TestBuildersCollection(TestCaseWithFactory):
    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestBuildersCollection, self).setUp()
        self.webservice = LaunchpadWebServiceCaller()

    def test_getBuildQueueSizes(self):
        logout()
        results = self.webservice.named_get(
            '/builders', 'getBuildQueueSizes', api_version='devel')
        self.assertEquals(
            ['nonvirt', 'virt'], sorted(results.jsonBody().keys()))

    def test_getBuildersForQueue(self):
        g1 = self.factory.makeProcessor('g1')
        quantum = self.factory.makeProcessor('quantum')
        self.factory.makeBuilder(
            processor=quantum, name='quantum_builder1')
        self.factory.makeBuilder(
            processor=quantum, name='quantum_builder2')
        self.factory.makeBuilder(
            processor=quantum, name='quantum_builder3', virtualized=False)
        self.factory.makeBuilder(
            processor=g1, name='g1_builder', virtualized=False)

        logout()
        results = self.webservice.named_get(
            '/builders', 'getBuildersForQueue',
            processor=api_url(quantum), virtualized=True,
            api_version='devel').jsonBody()
        self.assertEquals(
            ['quantum_builder1', 'quantum_builder2'],
            sorted(builder['name'] for builder in results['entries']))
class ProcessorSetWebServiceTests(TestCaseWithFactory):
    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(ProcessorSetWebServiceTests, self).setUp()
        self.webservice = LaunchpadWebServiceCaller()

    def test_getByName(self):
        self.factory.makeProcessor(name='transmeta')
        logout()

        processor = self.webservice.named_get('/+processors',
                                              'getByName',
                                              name='transmeta',
                                              api_version='devel').jsonBody()
        self.assertEqual('transmeta', processor['name'])

    def test_default_collection(self):
        # Make it easy to filter out sample data
        store = IStore(Processor)
        store.execute("UPDATE Processor SET name = 'sample_data_' || name")
        self.factory.makeProcessor(name='q1')
        self.factory.makeProcessor(name='i686')
        self.factory.makeProcessor(name='g4')

        logout()

        collection = self.webservice.get('/+processors?ws.size=10',
                                         api_version='devel').jsonBody()
        self.assertEqual(
            ['g4', 'i686', 'q1'],
            sorted(processor['name'] for processor in collection['entries']
                   if not processor['name'].startswith('sample_data_')))
Exemple #4
0
class TestGetBugData(TestCaseWithFactory):
    """Tests for the /bugs getBugData operation."""

    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestGetBugData, self).setUp()
        self.owner = self.factory.makePerson()
        with person_logged_in(self.owner):
            self.product = self.factory.makeProduct()
        self.bug = self.factory.makeBug(
            target=self.product,
            information_type=InformationType.PRIVATESECURITY)
        self.webservice = LaunchpadWebServiceCaller('launchpad-library',
                                                    'salgado-change-anything')

    def search(self, api_version, **kwargs):
        return self.webservice.named_get('/bugs',
                                         'getBugData',
                                         api_version=api_version,
                                         **kwargs).jsonBody()

    def test_search_returns_results(self):
        # A matching search returns results.
        response = self.search("devel", bug_id=self.bug.id)
        self.assertEqual(self.bug.id, response[0]['id'])

    def test_search_returns_no_results(self):
        # A non-matching search returns no results.
        response = self.search("devel", bug_id=0)
        self.assertEqual(len(response), 0)
class ProcessorSetWebServiceTests(TestCaseWithFactory):
    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(ProcessorSetWebServiceTests, self).setUp()
        self.webservice = LaunchpadWebServiceCaller()

    def test_getByName(self):
        self.factory.makeProcessor(name='transmeta')
        logout()

        processor = self.webservice.named_get(
            '/+processors', 'getByName', name='transmeta',
            api_version='devel').jsonBody()
        self.assertEquals('transmeta', processor['name'])

    def test_default_collection(self):
        # Make it easy to filter out sample data
        store = IStore(Processor)
        store.execute("UPDATE Processor SET name = 'sample_data_' || name")
        self.factory.makeProcessor(name='q1')
        self.factory.makeProcessor(name='i686')
        self.factory.makeProcessor(name='g4')

        logout()

        collection = self.webservice.get(
            '/+processors?ws.size=10', api_version='devel').jsonBody()
        self.assertEquals(
            ['g4', 'i686', 'q1'],
            sorted(
            processor['name'] for processor in collection['entries']
            if not processor['name'].startswith('sample_data_')))
Exemple #6
0
class TestBuildersCollection(TestCaseWithFactory):
    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestBuildersCollection, self).setUp()
        self.webservice = LaunchpadWebServiceCaller()

    def test_getBuildQueueSizes(self):
        logout()
        results = self.webservice.named_get('/builders',
                                            'getBuildQueueSizes',
                                            api_version='devel')
        self.assertEquals(['nonvirt', 'virt'],
                          sorted(results.jsonBody().keys()))

    def test_getBuildersForQueue(self):
        g1 = self.factory.makeProcessor('g1')
        quantum = self.factory.makeProcessor('quantum')
        self.factory.makeBuilder(processor=quantum, name='quantum_builder1')
        self.factory.makeBuilder(processor=quantum, name='quantum_builder2')
        self.factory.makeBuilder(processor=quantum,
                                 name='quantum_builder3',
                                 virtualized=False)
        self.factory.makeBuilder(processor=g1,
                                 name='g1_builder',
                                 virtualized=False)

        logout()
        results = self.webservice.named_get('/builders',
                                            'getBuildersForQueue',
                                            processor=api_url(quantum),
                                            virtualized=True,
                                            api_version='devel').jsonBody()
        self.assertEquals(['quantum_builder1', 'quantum_builder2'],
                          sorted(builder['name']
                                 for builder in results['entries']))
Exemple #7
0
 def test_global_search_by_tag(self):
     project1 = self.factory.makeProduct()
     project2 = self.factory.makeProduct()
     bug1 = self.factory.makeBug(target=project1, tags=["foo"])
     self.factory.makeBug(target=project1, tags=["bar"])
     bug3 = self.factory.makeBug(target=project2, tags=["foo"])
     self.factory.makeBug(target=project2, tags=["baz"])
     webservice = LaunchpadWebServiceCaller("launchpad-library",
                                            "salgado-change-anything")
     response = webservice.named_get("/bugs",
                                     "searchTasks",
                                     api_version="devel",
                                     tags="foo").jsonBody()
     self.assertEqual(2, response["total_size"])
     self.assertContentEqual([bug1.id, bug3.id], [
         int(entry["bug_link"].split("/")[-1])
         for entry in response["entries"]
     ])
Exemple #8
0
    def test_canBeUnsubscribedByUser(self):
        # Test canBeUnsubscribedByUser() API.
        webservice = LaunchpadWebServiceCaller('launchpad-library',
                                               'salgado-change-anything',
                                               domain='api.launchpad.dev:8085')

        with person_logged_in(ANONYMOUS):
            db_spec = self.factory.makeSpecification()
            db_person = self.factory.makePerson()
            launchpad = self.factory.makeLaunchpadService()

            spec = ws_object(launchpad, db_spec)
            person = ws_object(launchpad, db_person)
            subscription = spec.subscribe(person=person, essential=True)
            transaction.commit()

        result = webservice.named_get(subscription['self_link'],
                                      'canBeUnsubscribedByUser').jsonBody()
        self.assertTrue(result)
    def test_canBeUnsubscribedByUser(self):
        # Test canBeUnsubscribedByUser() API.
        webservice = LaunchpadWebServiceCaller(
            'launchpad-library', 'salgado-change-anything',
            domain='api.launchpad.dev:8085')

        with person_logged_in(ANONYMOUS):
            db_spec = self.factory.makeSpecification()
            db_person = self.factory.makePerson()
            launchpad = self.factory.makeLaunchpadService()

            spec = ws_object(launchpad, db_spec)
            person = ws_object(launchpad, db_person)
            subscription = spec.subscribe(person=person, essential=True)
            transaction.commit()

        result = webservice.named_get(
            subscription['self_link'], 'canBeUnsubscribedByUser').jsonBody()
        self.assertTrue(result)
Exemple #10
0
class TestProductSearchTasks(TestCaseWithFactory):
    """Tests for the information_type, linked_blueprints and order_by
    parameters."""

    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestProductSearchTasks, self).setUp()
        self.owner = self.factory.makePerson()
        with person_logged_in(self.owner):
            self.product = self.factory.makeProduct()
        self.product_name = self.product.name
        self.bug = self.factory.makeBug(
            target=self.product,
            information_type=InformationType.PRIVATESECURITY)
        self.webservice = LaunchpadWebServiceCaller('launchpad-library',
                                                    'salgado-change-anything')

    def search(self, api_version, **kwargs):
        return self.webservice.named_get('/%s' % self.product_name,
                                         'searchTasks',
                                         api_version=api_version,
                                         **kwargs).jsonBody()

    def test_linked_blueprints_in_devel(self):
        # Searching for linked Blueprints works in the devel API.
        self.search("devel", linked_blueprints="Show all bugs")

    def test_linked_blueprints_in_devel_2(self):
        # The linked_blueprints is considered. An error is returned if its
        # value is not a member of BugBlueprintSearch.
        self.assertRaises(ValueError,
                          self.search,
                          "devel",
                          linked_blueprints="Teabags!")

    def test_linked_blueprints_not_in_1_0(self):
        # Searching for linked Blueprints does not work in the 1.0 API. No
        # validation is performed for the linked_blueprints parameter, and
        # thus no error is returned when we pass rubbish.
        self.search("1.0", linked_blueprints="Teabags!")

    def test_linked_blueprints_not_in_beta(self):
        # Searching for linked Blueprints does not work in the beta API. No
        # validation is performed for the linked_blueprints parameter, and
        # thus no error is returned when we pass rubbish.
        self.search("beta", linked_blueprints="Teabags!")

    def test_search_returns_results(self):
        # A matching search returns results.
        response = self.search("devel", information_type="Private Security")
        self.assertEqual(response['total_size'], 1)

    def test_search_returns_no_results(self):
        # A non-matching search returns no results.
        response = self.search("devel", information_type="Private")
        self.assertEqual(response['total_size'], 0)

    def test_search_with_wrong_orderby(self):
        # Calling searchTasks() with a wrong order_by is a Bad Request.
        response = self.webservice.named_get('/%s' % self.product_name,
                                             'searchTasks',
                                             api_version='devel',
                                             order_by='date_created')
        self.assertEqual(400, response.status)
        self.assertRaisesWithContent(ValueError,
                                     "Unrecognized order_by: u'date_created'",
                                     response.jsonBody)

    def test_search_incomplete_status_results(self):
        # The Incomplete status matches Incomplete with response and
        # Incomplete without response bug tasks.
        with person_logged_in(self.owner):
            self.factory.makeBug(
                target=self.product,
                status=BugTaskStatusSearch.INCOMPLETE_WITH_RESPONSE)
            self.factory.makeBug(
                target=self.product,
                status=BugTaskStatusSearch.INCOMPLETE_WITHOUT_RESPONSE)
        response = self.search("devel", status="Incomplete")
        self.assertEqual(response['total_size'], 2)
class TestBuildersCollection(TestCaseWithFactory):
    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestBuildersCollection, self).setUp()
        self.webservice = LaunchpadWebServiceCaller()

    def test_list(self):
        names = ['bob', 'frog']
        for i in range(3):
            builder = self.factory.makeBuilder()
            self.factory.makeBinaryPackageBuild().queueBuild().markAsBuilding(
                builder)
            names.append(builder.name)
        logout()
        with RequestTimelineCollector() as recorder:
            builders = self.webservice.get('/builders',
                                           api_version='devel').jsonBody()
        self.assertContentEqual(names,
                                [b['name'] for b in builders['entries']])
        self.assertThat(recorder, HasQueryCount(Equals(19)))

    def test_list_with_private_builds(self):
        # Inaccessible private builds aren't linked in builders'
        # current_build fields.
        with admin_logged_in():
            rbpb = self.factory.makeBinaryPackageBuild(
                archive=self.factory.makeArchive(private=True))
            rbpb.queueBuild().markAsBuilding(
                self.factory.makeBuilder(name='restricted'))
            bpb = self.factory.makeBinaryPackageBuild(
                archive=self.factory.makeArchive(private=False))
            bpb.queueBuild().markAsBuilding(
                self.factory.makeBuilder(name='public'))
            bpb_url = canonical_url(bpb, path_only_if_possible=True)
        logout()

        builders = self.webservice.get('/builders',
                                       api_version='devel').jsonBody()
        current_builds = dict(
            (b['name'], b['current_build_link']) for b in builders['entries'])
        self.assertEqual('tag:launchpad.net:2008:redacted',
                         current_builds['restricted'])
        self.assertEqual('http://api.launchpad.dev/devel' + bpb_url,
                         current_builds['public'])

    def test_getBuildQueueSizes(self):
        logout()
        results = self.webservice.named_get('/builders',
                                            'getBuildQueueSizes',
                                            api_version='devel')
        self.assertEqual(['nonvirt', 'virt'],
                         sorted(results.jsonBody().keys()))

    def test_getBuildersForQueue(self):
        g1 = self.factory.makeProcessor('g1')
        quantum = self.factory.makeProcessor('quantum')
        self.factory.makeBuilder(processors=[quantum], name='quantum_builder1')
        self.factory.makeBuilder(processors=[quantum], name='quantum_builder2')
        self.factory.makeBuilder(processors=[quantum],
                                 name='quantum_builder3',
                                 virtualized=False)
        self.factory.makeBuilder(processors=[g1],
                                 name='g1_builder',
                                 virtualized=False)

        logout()
        results = self.webservice.named_get('/builders',
                                            'getBuildersForQueue',
                                            processor=api_url(quantum),
                                            virtualized=True,
                                            api_version='devel').jsonBody()
        self.assertEqual(['quantum_builder1', 'quantum_builder2'],
                         sorted(builder['name']
                                for builder in results['entries']))

    def test_new(self):
        person = self.factory.makePerson()
        badmins = getUtility(IPersonSet).getByName('launchpad-buildd-admins')
        webservice = webservice_for_person(
            person, permission=OAuthPermission.WRITE_PRIVATE)
        args = dict(name='foo',
                    processors=['/+processors/386'],
                    title='foobar',
                    url='http://foo.buildd:8221/',
                    virtualized=False,
                    api_version='devel')

        response = webservice.named_post('/builders', 'new', **args)
        self.assertEqual(401, response.status)

        with admin_logged_in():
            badmins.addMember(person, badmins)
        response = webservice.named_post('/builders', 'new', **args)
        self.assertEqual(201, response.status)

        self.assertEqual('foobar',
                         webservice.get('/builders/foo').jsonBody()['title'])
class TestBuilderEntry(TestCaseWithFactory):
    layer = DatabaseFunctionalLayer

    def setUp(self):
        super(TestBuilderEntry, self).setUp()
        self.webservice = LaunchpadWebServiceCaller()

    def test_security(self):
        # Attributes can only be set by buildd admins.
        builder = self.factory.makeBuilder()
        user = self.factory.makePerson()
        user_webservice = webservice_for_person(
            user, permission=OAuthPermission.WRITE_PUBLIC)
        patch = dumps({'clean_status': 'Cleaning'})
        logout()

        # A normal user is unauthorized.
        response = user_webservice.patch(api_url(builder),
                                         'application/json',
                                         patch,
                                         api_version='devel')
        self.assertEqual(401, response.status)

        # But a buildd admin can set the attribute.
        with admin_logged_in():
            buildd_admins = getUtility(IPersonSet).getByName(
                'launchpad-buildd-admins')
            buildd_admins.addMember(user, buildd_admins.teamowner)
        response = user_webservice.patch(api_url(builder),
                                         'application/json',
                                         patch,
                                         api_version='devel')
        self.assertEqual(209, response.status)
        self.assertEqual('Cleaning', response.jsonBody()['clean_status'])

    def test_exports_processor(self):
        processor = self.factory.makeProcessor('s1')
        builder = self.factory.makeBuilder(processors=[processor])

        logout()
        entry = self.webservice.get(api_url(builder),
                                    api_version='devel').jsonBody()
        self.assertEndsWith(entry['processor_link'], '/+processors/s1')

    def test_getBuildRecords(self):
        builder = self.factory.makeBuilder()
        build = self.factory.makeBinaryPackageBuild(builder=builder)
        build_title = build.title

        logout()
        results = self.webservice.named_get(api_url(builder),
                                            'getBuildRecords',
                                            pocket='Release',
                                            api_version='devel').jsonBody()
        self.assertEqual([build_title],
                         [entry['title'] for entry in results['entries']])
        results = self.webservice.named_get(api_url(builder),
                                            'getBuildRecords',
                                            pocket='Proposed',
                                            api_version='devel').jsonBody()
        self.assertEqual(0, len(results['entries']))