Esempio n. 1
0
    def test_form_invalid_does_not_save_into_db(self):
        endpoint = factory.pick_choice(ENDPOINT_CHOICES)
        request = HttpRequest()
        request.user = factory.make_User()
        value_too_long = factory.make_string(20)
        form = TestOptionForm({"field1": value_too_long, "field2": False})
        result = form.save(endpoint, request)

        self.assertFalse(result, form._errors)
        self.assertIn("field1", form._errors)
        self.assertIsNone(Config.objects.get_config("field1"))
        self.assertIsNone(Config.objects.get_config("field2"))
Esempio n. 2
0
 def test_PUT_update_updates_pod_default_macvlan_mode(self):
     self.patch(pods, "post_commit_do")
     pod_info = self.make_pod_info()
     pod = factory.make_Pod(pod_type=pod_info["type"])
     default_macvlan_mode = factory.pick_choice(MACVLAN_MODE_CHOICES)
     self.fake_pod_discovery()
     response = self.client.put(
         get_pod_uri(pod), {"default_macvlan_mode": default_macvlan_mode})
     self.assertEqual(http.client.OK, response.status_code,
                      response.content)
     pod.refresh_from_db()
     self.assertEqual(pod.default_macvlan_mode, default_macvlan_mode)
Esempio n. 3
0
 def test__cannt_run_destructive_test_on_non_machine(self):
     script = factory.make_Script(script_type=SCRIPT_TYPE.TESTING,
                                  destructive=True)
     node = factory.make_Node(node_type=factory.pick_choice(
         NODE_TYPE_CHOICES, but_not=[NODE_TYPE.MACHINE]))
     user = factory.make_admin()
     form = TestForm(instance=node,
                     user=user,
                     data={
                         'testing_scripts': script.name,
                     })
     self.assertFalse(form.is_valid())
Esempio n. 4
0
 def test_create_audit_event_creates_audit_event_with_AnonymousUser(self):
     request = HttpRequest()
     request.user = AnonymousUser()
     request.META = {
         "HTTP_USER_AGENT": factory.make_name("user_agent"),
         "HTTP_HOST": factory.make_ipv4_address(),
     }
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     create_audit_event(EVENT_TYPES.NODE_PXE_REQUEST, endpoint, request)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertIsNone(event.user_id)
Esempio n. 5
0
 def test_creates_audit_event_on_save(self):
     user = factory.make_User()
     key_string = get_data('data/test_x509_0.pem')
     form = SSLKeyForm(
         user=user,
         data={'key': key_string})
     request = HttpRequest()
     request.user = user
     form.save(factory.pick_choice(ENDPOINT_CHOICES), request)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEquals(event.description, "Created SSL key.")
Esempio n. 6
0
    def test_can_use_parallel(self):
        script_parallel = factory.pick_choice(SCRIPT_PARALLEL_CHOICES)
        form = ScriptForm(
            data={
                "name": factory.make_name("name"),
                "script": factory.make_script_content(),
                "parallel": script_parallel,
            })
        self.assertTrue(form.is_valid(), form.errors)
        script = form.save()

        self.assertEquals(script_parallel, script.parallel)
Esempio n. 7
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)
Esempio n. 8
0
 def test_manager_set_config_creates_audit_event(self):
     user = factory.make_User()
     request = HttpRequest()
     request.user = user
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     Config.objects.set_config("name", "value", endpoint, request)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(
         event.description,
         "Updated configuration setting 'name' to 'value'.",
     )
Esempio n. 9
0
    def test__can_use_script_type_name(self):
        script_type = factory.pick_choice(SCRIPT_TYPE_CHOICES)
        form = ScriptForm(
            data={
                'name': factory.make_name('name'),
                'script': factory.make_script_content(),
                'type': script_type,
            })
        self.assertTrue(form.is_valid(), form.errors)
        script = form.save()

        self.assertEquals(script_type, script.script_type)
Esempio n. 10
0
    def test__can_use_hardware_type_name(self):
        hardware_type = factory.pick_choice(HARDWARE_TYPE_CHOICES)
        form = ScriptForm(
            data={
                'name': factory.make_name('name'),
                'script': factory.make_script_content(),
                'hardware_type': hardware_type,
            })
        self.assertTrue(form.is_valid(), form.errors)
        script = form.save()

        self.assertEquals(hardware_type, script.hardware_type)
Esempio n. 11
0
 def test_abort_fails_for_unsupported_operation(self):
     status = factory.pick_choice(
         NODE_STATUS_CHOICES, but_not=[
             NODE_STATUS.DISK_ERASING,
             NODE_STATUS.COMMISSIONING,
             NODE_STATUS.DEPLOYING,
             NODE_STATUS.TESTING,
         ])
     node = factory.make_Node(status=status)
     response = self.client.post(
         self.get_node_uri(node), {'op': 'abort'})
     self.assertEqual(http.client.CONFLICT, response.status_code)
Esempio n. 12
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, s390x'
     ], form.errors.get('arches'))
     request = HttpRequest()
     request.user = factory.make_User()
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     self.assertRaises(ValueError, form.save, endpoint, request)
Esempio n. 13
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)
Esempio n. 14
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)
Esempio n. 15
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)
Esempio n. 16
0
 def test_creates_audit_event_for_specified_user_on_save(self):
     specified_user = factory.make_User()
     request_user = factory.make_User()
     key_string = get_data("data/test_rsa0.pub")
     form = SSHKeyForm(user=specified_user, data={"key": key_string})
     request = HttpRequest()
     request.user = request_user
     form.save(factory.pick_choice(ENDPOINT_CHOICES), request)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(event.description,
                      "Created SSH key for %s." % specified_user)
Esempio n. 17
0
 def test__updates_subnet_when_node_set(self):
     dhcp_snippet = factory.make_DHCPSnippet(node=factory.make_Node())
     subnet = factory.make_Subnet()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={'subnet': subnet.id})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertIsNone(dhcp_snippet.node)
     self.assertEquals(subnet, dhcp_snippet.subnet)
Esempio n. 18
0
 def test__loads_yaml_embedded_attributes(self):
     embedded_yaml = {
         'name': factory.make_name('name'),
         'title': factory.make_name('title'),
         'description': factory.make_name('description'),
         'tags': [factory.make_name('tag') for _ in range(3)],
         'script_type': factory.pick_choice(SCRIPT_TYPE_CHOICES),
         'hardware_type': factory.pick_choice(HARDWARE_TYPE_CHOICES),
         'parallel': factory.pick_choice(SCRIPT_PARALLEL_CHOICES),
         'results': ['write_speed'],
         'parameters': [{
             'type': 'storage'
         }, {
             'type': 'runtime'
         }],
         'packages': {
             'apt': [factory.make_name('package')]
         },
         'timeout': random.randint(0, 1000),
         'destructive': factory.pick_bool(),
     }
     script_content = factory.make_script_content(embedded_yaml)
     form = ScriptForm(data={'script': script_content})
     self.assertTrue(form.is_valid(), form.errors)
     script = form.save()
     self.assertEquals(embedded_yaml['name'], script.name)
     self.assertEquals(embedded_yaml['title'], script.title)
     self.assertEquals(embedded_yaml['description'], script.description)
     self.assertThat(script.tags, ContainsAll(embedded_yaml['tags']))
     self.assertEquals(embedded_yaml['script_type'], script.script_type)
     self.assertEquals(embedded_yaml['hardware_type'], script.hardware_type)
     self.assertEquals(embedded_yaml['parallel'], script.parallel)
     self.assertItemsEqual(embedded_yaml['results'], script.results)
     self.assertItemsEqual(embedded_yaml['parameters'], script.parameters)
     self.assertDictEqual(embedded_yaml['packages'], script.packages)
     self.assertEquals(timedelta(0, embedded_yaml['timeout']),
                       script.timeout)
     self.assertEquals(embedded_yaml['destructive'], script.destructive)
     self.assertFalse(script.default)
     self.assertEquals(script_content, script.script.data)
Esempio n. 19
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)
Esempio n. 20
0
 def test_update_service_for_updates_service_status_and_info(self):
     controller = factory.make_RegionController()
     Service.objects.create_services_for(controller)
     service = random.choice(list(REGION_SERVICES))
     status = factory.pick_choice(SERVICE_STATUS_CHOICES)
     info = factory.make_name("info")
     observed = Service.objects.update_service_for(
         controller, service, status, info)
     self.assertThat(
         reload_object(observed),
         MatchesStructure.byEquality(
             node=controller, name=service,
             status=status, status_info=info))
Esempio n. 21
0
 def test_PUT_update_updates_pod_default_macvlan_mode(self):
     self.become_admin()
     pod_info = self.make_pod_info()
     pod = factory.make_Pod(pod_type=pod_info['type'])
     default_macvlan_mode = factory.pick_choice(MACVLAN_MODE_CHOICES)
     self.fake_pod_discovery()
     response = self.client.put(get_pod_uri(pod), {
         'default_macvlan_mode': default_macvlan_mode,
     })
     self.assertEqual(
         http.client.OK, response.status_code, response.content)
     pod.refresh_from_db()
     self.assertEqual(pod.default_macvlan_mode, default_macvlan_mode)
Esempio n. 22
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)
Esempio n. 23
0
 def test__updates_value(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     old_value = dhcp_snippet.value.data
     new_value = factory.make_string()
     form = DHCPSnippetForm(instance=dhcp_snippet,
                            data={'value': new_value})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(new_value, dhcp_snippet.value.data)
     self.assertEqual(old_value, dhcp_snippet.value.previous_version.data)
Esempio n. 24
0
 def test_store_result_only_allows_status_running(self):
     # XXX ltrager 2016-12-07 - Only allow SCRIPT_STATUS.RUNNING once
     # status tracking is implemented.
     script_result = factory.make_ScriptResult(
         status=factory.pick_choice(
             SCRIPT_STATUS_CHOICES,
             [
                 SCRIPT_STATUS.PENDING,
                 SCRIPT_STATUS.INSTALLING,
                 SCRIPT_STATUS.RUNNING,
             ]))
     self.assertRaises(
         AssertionError, script_result.store_result, random.randint(0, 255))
Esempio n. 25
0
    def test_GET_filters_by_type(self):
        node = factory.make_Node()
        result_type = factory.pick_choice(RESULT_TYPE_CHOICES)
        script_sets = [
            factory.make_ScriptSet(result_type=result_type, node=node)
            for _ in range(3)
        ]

        for _ in range(10):
            factory.make_ScriptSet(node=node,
                                   result_type=factory.pick_choice(
                                       RESULT_TYPE_CHOICES,
                                       but_not=[result_type]))

        response = self.client.get(self.get_script_results_uri(node),
                                   {'type': result_type})
        self.assertThat(response, HasStatusCode(http.client.OK))
        parsed_results = json_load_bytes(response.content)

        self.assertItemsEqual(
            [script_set.id for script_set in script_sets],
            [parsed_result['id'] for parsed_result in parsed_results])
Esempio n. 26
0
    def test_GET_filters_by_hardware_type(self):
        script = factory.make_Script()
        for _ in range(3):
            factory.make_Script(hardware_type=factory.pick_choice(
                HARDWARE_TYPE_CHOICES, but_not=[script.hardware_type]))

        response = self.client.get(self.get_scripts_uri(),
                                   {'hardware_type': script.hardware_type})
        self.assertThat(response, HasStatusCode(http.client.OK))
        parsed_results = json_load_bytes(response.content)

        self.assertItemsEqual([script.id],
                              [result['id'] for result in parsed_results])
Esempio n. 27
0
 def test__updates_name(self):
     dhcp_snippet = factory.make_DHCPSnippet()
     name = factory.make_name('name')
     form = DHCPSnippetForm(instance=dhcp_snippet, data={'name': name})
     self.assertTrue(form.is_valid(), form.errors)
     endpoint = factory.pick_choice(ENDPOINT_CHOICES)
     request = HttpRequest()
     request.user = factory.make_User()
     dhcp_snippet = form.save(endpoint, request)
     self.assertEqual(name, dhcp_snippet.name)
     event = Event.objects.get(type__level=AUDIT)
     self.assertIsNotNone(event)
     self.assertEqual(event.description,
                      "Updated DHCP snippet '%s'." % dhcp_snippet.name)
Esempio n. 28
0
    def test_validates_composite_form(self):
        endpoint = factory.pick_choice(ENDPOINT_CHOICES)
        request = HttpRequest()
        request.user = factory.make_User()
        value1 = factory.make_string(5)
        value2 = factory.make_string(5)
        form = TestCompositeForm({
            "maas_name": value1,
            "non_config_field": value2
        })
        result = form.save(endpoint, request)

        self.assertTrue(result, form._errors)
        self.assertEqual(value1, Config.objects.get_config("maas_name"))
Esempio n. 29
0
 def test__update_prohibits_most_field_updates_on_default_script(self):
     script = factory.make_Script(default=True)
     for name, field in ScriptForm.base_fields.items():
         if name in ['tags', 'timeout']:
             continue
         elif name == 'type':
             value = factory.pick_choice(SCRIPT_TYPE_CHOICES)
         elif name == 'destructive':
             value = factory.pick_bool()
         else:
             value = factory.make_string()
         form = ScriptForm(data={name: value}, instance=script)
         self.assertFalse(form.is_valid())
         self.assertEquals(1, VersionedTextFile.objects.all().count())
Esempio n. 30
0
    def test_update_script(self):
        load_builtin_scripts()
        update_script_values = random.choice(BUILTIN_SCRIPTS)
        script = Script.objects.get(name=update_script_values.name)

        # Fields which we can update
        orig_title = script.title
        orig_description = script.description
        orig_script_type = script.script_type
        orig_results = script.results
        orig_parameters = script.parameters

        script.title = factory.make_string()
        script.description = factory.make_string()
        script.script_type = factory.pick_choice(SCRIPT_TYPE_CHOICES)
        script.results = [factory.make_name("result")]
        script.script.parameters = {
            factory.make_name("param"): {
                "type": "storage"
            }
        }

        # Put fake old data in to simulate updating a script.
        old_script = VersionedTextFile.objects.create(
            data=factory.make_string())
        script.script = old_script

        # User changeable fields.
        user_tags = [factory.make_name("tag") for _ in range(3)]
        script.tags = copy.deepcopy(user_tags)
        user_timeout = timedelta(random.randint(0, 1000))
        script.timeout = user_timeout
        script.save()

        load_builtin_scripts()
        script = reload_object(script)

        self.assertEquals(orig_title, script.title, script.name)
        self.assertEquals(orig_description, script.description, script.name)
        self.assertEquals(orig_script_type, script.script_type, script.name)
        self.assertDictEqual(orig_results, script.results, script.name)
        self.assertDictEqual(orig_parameters, script.parameters, script.name)

        self.assertThat(script.tags, ContainsAll(user_tags))
        self.assertEquals(user_timeout, script.timeout)

        self.assertEquals(old_script, script.script.previous_version)
        self.assertEquals("Updated by maas-%s" % get_maas_version(),
                          script.script.comment)
        self.assertTrue(script.default)