Пример #1
0
 def test__default_repository_cannot_be_disabled(self):
     repo = factory.make_PackageRepository(default=True)
     params = self.make_valid_repo_params(repo)
     params['enabled'] = False
     form = PackageRepositoryForm(data=params, instance=repo)
     self.assertFalse(form.is_valid())
     self.assertRaises(ValidationError, form.clean)
Пример #2
0
    def create(self, params):
        """Create the object from params iff admin."""
        if not reload_object(self.user).is_superuser:
            raise HandlerPermissionError()

        request = HttpRequest()
        request.user = self.user
        # Create by using form.
        form = PackageRepositoryForm(request=request, data=params)
        if form.is_valid():
            try:
                obj = form.save(ENDPOINT.UI, request)
            except ValidationError as e:
                try:
                    raise HandlerValidationError(e.message_dict)
                except AttributeError:
                    raise HandlerValidationError({"__all__": e.message})
            return self.full_dehydrate(obj)
        else:
            raise HandlerValidationError(form.errors)

        # Create by updating the fields on the object.
        obj = self._meta.object_class()
        obj = self.full_hydrate(obj, params)
        obj.save()
        return self.full_dehydrate(obj)
Пример #3
0
    def update(self, params):
        """Update the object from params iff admin."""
        if not reload_object(self.user).is_superuser:
            raise HandlerPermissionError()

        obj = self.get_object(params)
        request = HttpRequest()
        request.user = self.user
        # Update by using form.
        form = PackageRepositoryForm(instance=obj,
                                     request=request,
                                     data=params)
        if form.is_valid():
            try:
                obj = form.save(ENDPOINT.UI, request)
            except ValidationError as e:
                raise HandlerValidationError(e.error_dict)
            return self.full_dehydrate(obj)
        else:
            raise HandlerValidationError(form.errors)

        # Update by updating the fields on the object.
        obj = self.full_hydrate(obj, params)
        obj.save()
        return self.full_dehydrate(obj)
Пример #4
0
    def create(Self, request):
        """Create a Package Repository.

        :param name: The name of the Package Repository.
        :type name: unicode

        :param url: The url of the Package Repository.
        :type url: unicode

        :param distributions: Which package distributions to include.
        :type distributions: unicode

        :param disabled_pockets: The list of pockets to disable.

        :param disabled_components: The list of components to disable. Only
            applicable to the default Ubuntu repositories.

        :param components: The list of components to enable. Only applicable
            to custom repositories.

        :param arches: The list of supported architectures.

        :param key: The authentication key to use with the repository.
        :type key: unicode

        :param enabled: Whether or not the repository is enabled.
        :type enabled: boolean
        """
        form = PackageRepositoryForm(data=request.data)
        if form.is_valid():
            return form.save(ENDPOINT.API, request)
        else:
            raise MAASAPIValidationError(form.errors)
Пример #5
0
 def test__creates_package_repository(self):
     repo = factory.make_PackageRepository()
     params = self.make_valid_repo_params(repo)
     form = PackageRepositoryForm(data=params)
     self.assertTrue(form.is_valid(), form.errors)
     package_repository = form.save()
     self.assertAttributes(package_repository, params)
Пример #6
0
 def test__updates_name(self):
     package_repository = factory.make_PackageRepository()
     name = factory.make_name('name')
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'name': name})
     self.assertTrue(form.is_valid(), form.errors)
     package_repository = form.save()
     self.assertEqual(name, package_repository.name)
Пример #7
0
 def test__updates_enabled(self):
     package_repository = factory.make_PackageRepository()
     enabled = not package_repository.enabled
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'enabled': enabled})
     self.assertTrue(form.is_valid(), form.errors)
     package_repository = form.save()
     self.assertEqual(enabled, package_repository.enabled)
Пример #8
0
 def test__updates_url(self):
     package_repository = factory.make_PackageRepository()
     url = factory.make_url(scheme='http')
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'url': url})
     self.assertTrue(form.is_valid(), form.errors)
     package_repository = form.save()
     self.assertEqual(url, package_repository.url)
Пример #9
0
 def test__create_package_repository_defaults_to_enabled(self):
     repo = factory.make_PackageRepository()
     params = self.make_valid_repo_params(repo)
     del params['enabled']
     form = PackageRepositoryForm(data=params)
     self.assertTrue(form.is_valid(), form.errors)
     package_repository = form.save()
     self.assertAttributes(package_repository, params)
     self.assertTrue(package_repository.enabled)
Пример #10
0
 def test_update_failure_doesnt_delete_url(self):
     package_repository = factory.make_PackageRepository()
     url = package_repository.url
     form = PackageRepositoryForm(
         instance=package_repository,
         data={"url": factory.make_url(scheme="fake")},
     )
     self.assertFalse(form.is_valid())
     self.assertEquals(url, reload_object(package_repository).url)
Пример #11
0
 def test__fail_validation_on_create_cleans_url(self):
     PackageRepository.objects.all().delete()
     repo = factory.make_PackageRepository()
     params = self.make_valid_repo_params(repo)
     params['url'] = factory.make_string()
     repo.delete()
     form = PackageRepositoryForm(data=params)
     self.assertFalse(form.is_valid())
     self.assertItemsEqual([], PackageRepository.objects.all())
Пример #12
0
    def update(self, request, id):
        """@description-title Update a package repository
        @description Update the package repository with the given id.

        @param (int) "{id}" [required=true] A package repository id.

        @param (string) "name" [required=false] The name of the package
        repository.

        @param (string) "url" [required=false] The url of the package
        repository.

        @param (string) "distributions" [required=false] Which package
        distributions to include.

        @param (string) "disabled_pockets" [required=false] The list of pockets
        to disable.

        @param (string) "disabled_components" [required=false] The list of
        components to disable. Only applicable to the default Ubuntu
        repositories.

        @param (string) "disable_sources" [required=false] Disable deb-src
        lines.

        @param (string) "components" [required=false] The list of components to
        enable. Only applicable to custom repositories.

        @param (string) "arches" [required=false] The list of supported
        architectures.

        @param (string) "key" [required=false] The authentication key to use
        with the repository.

        @param (boolean) "enabled" [required=false] Whether or not the
        repository is enabled.

        @success (http-status-code) "server-success" 200
        @success (json) "success-json" A JSON object containing information
        about the updated package repository.
        @success-example "success-json" [exkey=pkg-repos-update] placeholder
        text

        @error (http-status-code) "404" 404
        @error (content) "not-found" The requested package repository is not
        found.
        @error-example "not-found"
            Not Found
        """
        package_repository = PackageRepository.objects.get_object_or_404(id)
        form = PackageRepositoryForm(instance=package_repository,
                                     data=request.data)
        if form.is_valid():
            return form.save(ENDPOINT.API, request)
        else:
            raise MAASAPIValidationError(form.errors)
Пример #13
0
 def test__updates_arches(self):
     package_repository = factory.make_PackageRepository()
     arch1 = random.choice(PackageRepository.KNOWN_ARCHES)
     arch2 = random.choice(PackageRepository.KNOWN_ARCHES)
     arch3 = random.choice(PackageRepository.KNOWN_ARCHES)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'arches': [arch1, arch2, arch3]})
     self.assertTrue(form.is_valid(), form.errors)
     package_repository = form.save()
     self.assertEqual([arch1, arch2, arch3], package_repository.arches)
Пример #14
0
 def test__creates_package_repository_defaults_main_arches(self):
     repo = factory.make_PackageRepository(arches=[])
     params = self.make_valid_repo_params(repo)
     del params['arches']
     form = PackageRepositoryForm(data=params)
     self.assertTrue(form.is_valid(), form.errors)
     package_repository = form.save()
     self.assertAttributes(package_repository, params)
     self.assertItemsEqual(package_repository.arches,
                           PackageRepository.MAIN_ARCHES)
Пример #15
0
 def test_disabled_component_comma_cleaning(self):
     package_repository = factory.make_PackageRepository(
         default=True, components=[]
     )
     form = PackageRepositoryForm(
         instance=package_repository,
         data={"disabled_components": ["universe,multiverse"]},
     )
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     repo = form.save(endpoint, request)
     self.assertItemsEqual(
         ["universe", "multiverse"], repo.disabled_components
     )
     form = PackageRepositoryForm(
         instance=package_repository,
         data={"disabled_components": ["universe, multiverse"]},
     )
     repo = form.save(endpoint, request)
     self.assertItemsEqual(
         ["universe", "multiverse"], repo.disabled_components
     )
     form = PackageRepositoryForm(
         instance=package_repository,
         data={"disabled_components": ["universe"]},
     )
     repo = form.save(endpoint, request)
     self.assertItemsEqual(["universe"], repo.disabled_components)
Пример #16
0
 def test__updates_url(self):
     package_repository = factory.make_PackageRepository()
     url = factory.make_url(scheme='http')
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'url': url})
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertEqual(url, package_repository.url)
Пример #17
0
 def test__updates_enabled(self):
     package_repository = factory.make_PackageRepository()
     enabled = not package_repository.enabled
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'enabled': enabled})
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertEqual(enabled, package_repository.enabled)
Пример #18
0
 def test_default_ports_package_repository_arches(self):
     package_repository = PackageRepository.objects.get(
         name="ports_archive")
     form = PackageRepositoryForm(instance=package_repository,
                                  data={"arches": []})
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertItemsEqual(package_repository.arches,
                           PackageRepository.PORTS_ARCHES)
Пример #19
0
 def test__create_package_repository_defaults_to_enabled(self):
     repo = factory.make_PackageRepository()
     params = self.make_valid_repo_params(repo)
     del params['enabled']
     form = PackageRepositoryForm(data=params)
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertAttributes(package_repository, params)
     self.assertTrue(package_repository.enabled)
Пример #20
0
 def test__creates_package_repository_defaults_main_arches(self):
     repo = factory.make_PackageRepository(arches=[])
     params = self.make_valid_repo_params(repo)
     del params['arches']
     form = PackageRepositoryForm(data=params)
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertAttributes(package_repository, params)
     self.assertItemsEqual(package_repository.arches,
                           PackageRepository.MAIN_ARCHES)
Пример #21
0
 def test__updates_arches(self):
     package_repository = factory.make_PackageRepository()
     arch1 = random.choice(PackageRepository.KNOWN_ARCHES)
     arch2 = random.choice(PackageRepository.KNOWN_ARCHES)
     arch3 = random.choice(PackageRepository.KNOWN_ARCHES)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'arches': [arch1, arch2, arch3]})
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertEqual([arch1, arch2, arch3], package_repository.arches)
Пример #22
0
 def test__creates_package_repository(self):
     repo = factory.make_PackageRepository()
     params = self.make_valid_repo_params(repo)
     form = PackageRepositoryForm(data=params)
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertAttributes(package_repository, params)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(
         event.description,
         "Created package repository '%s'." % package_repository.name)
Пример #23
0
 def test__updates_disable_sources(self):
     package_repository = factory.make_PackageRepository()
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'disable_sources': True})
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertTrue(package_repository.disable_sources)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(
         event.description,
         "Updated package repository '%s'." % (package_repository.name))
Пример #24
0
 def test__updates_name(self):
     package_repository = factory.make_PackageRepository()
     name = factory.make_name('name')
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'name': name})
     self.assertTrue(form.is_valid(), form.errors)
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     package_repository = form.save(endpoint, request)
     self.assertEqual(name, package_repository.name)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(
         event.description,
         "Package repository '%s'" % package_repository.name +
         " updated by '%(username)s'.")
Пример #25
0
 def test__arches_comma_cleaning(self):
     package_repository = factory.make_PackageRepository()
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'arches': ['i386,armhf']})
     repo = form.save()
     self.assertItemsEqual(['i386', 'armhf'], repo.arches)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'arches': ['i386, armhf']})
     repo = form.save()
     self.assertItemsEqual(['i386', 'armhf'], repo.arches)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'arches': ['i386']})
     repo = form.save()
     self.assertItemsEqual(['i386'], repo.arches)
Пример #26
0
 def test__component_comma_cleaning(self):
     package_repository = factory.make_PackageRepository()
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'components': ['val1,val2']})
     repo = form.save()
     self.assertItemsEqual(['val1', 'val2'], repo.components)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'components': ['val1, val2']})
     repo = form.save()
     self.assertItemsEqual(['val1', 'val2'], repo.components)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'components': ['val1']})
     repo = form.save()
     self.assertItemsEqual(['val1'], repo.components)
Пример #27
0
 def test__arches_validation(self):
     package_repository = factory.make_PackageRepository()
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'arches': ['i286']})
     self.assertEqual([
         "'i286' is not a valid architecture. Known architectures: "
         'amd64, arm64, armhf, i386, ppc64el'
     ], form.errors.get('arches'))
     self.assertRaises(ValueError, form.save)
Пример #28
0
    def create(Self, request):
        """@description-title Create a package repository
        @description Create a new package repository.

        @param (string) "name" [required=true] The name of the package
        repository.

        @param (string) "url" [required=true] The url of the package
        repository.

        @param (string) "distributions" [required=false] Which package
        distributions to include.

        @param (string) "disabled_pockets" [required=false] The list of pockets
        to disable.

        @param (string) "disabled_components" [required=false] The list of
        components to disable. Only applicable to the default Ubuntu
        repositories.

        @param (string) "components" [required=false] The list of components to
        enable. Only applicable to custom repositories.

        @param (string) "arches" [required=false] The list of supported
        architectures.

        @param (string) "key" [required=false] The authentication key to use
        with the repository.

        @param (boolean) "enabled" [required=false] Whether or not the
        repository is enabled.

        @success (http-status-code) "server-success" 200
        @success (json) "success-json" A JSON object containing information
        about the new package repository.
        @success-example "success-json" [exkey=pkg-repos-update] placeholder
        text
        """
        form = PackageRepositoryForm(data=request.data)
        if form.is_valid():
            return form.save(ENDPOINT.API, request)
        else:
            raise MAASAPIValidationError(form.errors)
Пример #29
0
 def test__disabled_pocket_comma_cleaning(self):
     package_repository = factory.make_PackageRepository()
     form = PackageRepositoryForm(
         instance=package_repository,
         data={'disabled_pockets': ['updates,backports']})
     repo = form.save()
     self.assertItemsEqual(['updates', 'backports'], repo.disabled_pockets)
     form = PackageRepositoryForm(
         instance=package_repository,
         data={'disabled_pockets': ['updates, backports']})
     repo = form.save()
     self.assertItemsEqual(['updates', 'backports'], repo.disabled_pockets)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'disabled_pockets': ['updates']})
     repo = form.save()
     self.assertItemsEqual(['updates'], repo.disabled_pockets)
Пример #30
0
 def test__component_comma_cleaning(self):
     package_repository = factory.make_PackageRepository()
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'components': ['val1,val2']})
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     repo = form.save(endpoint, request)
     self.assertItemsEqual(['val1', 'val2'], repo.components)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'components': ['val1, val2']})
     repo = form.save(endpoint, request)
     self.assertItemsEqual(['val1', 'val2'], repo.components)
     form = PackageRepositoryForm(instance=package_repository,
                                  data={'components': ['val1']})
     repo = form.save(endpoint, request)
     self.assertItemsEqual(['val1'], repo.components)