Exemple #1
0
 def test_read_404_when_bad_id(self):
     uri = reverse('discovery_handler', args=[random.randint(10000, 20000)])
     response = self.client.get(uri)
     self.assertThat(response, HasStatusCode(http.client.NOT_FOUND))
 def test_read_notification_for_admins(self):
     notification = factory.make_Notification(admins=True)
     uri = get_notification_uri(notification)
     response = self.client.get(uri)
     self.assertThat(response, HasStatusCode(http.client.UNAUTHORIZED))
 def test_delete_is_for_admins_only(self):
     notification = factory.make_Notification()
     uri = get_notification_uri(notification)
     response = self.client.delete(uri)
     self.assertThat(response, HasStatusCode(http.client.UNAUTHORIZED))
 def test_create(self):
     uri = get_notifications_uri()
     response = self.client.post(uri, {"message": factory.make_name()})
     self.assertThat(response, HasStatusCode(http.client.UNAUTHORIZED))
 def test_dismiss_notification_for_other(self):
     other = factory.make_User()
     notification = factory.make_Notification(user=other)
     uri = get_notification_uri(notification)
     response = self.client.post(uri, {"op": "dismiss"})
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
Exemple #6
0
 def test_PUT_admin_only(self):
     script_set = self.make_scriptset()
     response = self.client.put(self.get_script_result_uri(script_set))
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
     self.assertIsNotNone(reload_object(script_set))
Exemple #7
0
    def test_PUT_filters(self):
        self.become_admin()
        scripts = [factory.make_Script() for _ in range(10)]
        script_set = self.make_scriptset()
        script_results = {}
        for script in scripts:
            script_result = factory.make_ScriptResult(script_set=script_set,
                                                      script=script)
            script_results[script_result.name] = script_result
        results_list = list(script_results.values())
        filtered_results = [random.choice(results_list) for _ in range(3)]

        response = self.client.get(
            self.get_script_result_uri(script_set),
            {
                "filters":
                "%s,%s,%d" % (
                    filtered_results[0].name,
                    random.choice([
                        tag for tag in filtered_results[1].script.tags
                        if "tag" in tag
                    ]),
                    filtered_results[2].id,
                )
            },
        )
        self.assertThat(response, HasStatusCode(http.client.OK))
        parsed_result = json_load_bytes(response.content)
        results = parsed_result.pop("results")

        self.assertDictEqual(
            {
                "id":
                script_set.id,
                "system_id":
                script_set.node.system_id,
                "type":
                script_set.result_type,
                "type_name":
                script_set.result_type_name,
                "last_ping":
                fmt_time(script_set.last_ping),
                "status":
                script_set.status,
                "status_name":
                script_set.status_name,
                "started":
                fmt_time(script_set.started),
                "ended":
                fmt_time(script_set.ended),
                "runtime":
                script_set.runtime,
                "resource_uri":
                "/MAAS/api/2.0/nodes/%s/results/%d/" %
                (script_set.node.system_id, script_set.id),
            },
            parsed_result,
        )
        for result in results:
            self.assertIn(
                result["name"],
                [script_result.name for script_result in filtered_results],
            )
            script_result = script_results[result["name"]]
            self.assertDictEqual(
                {
                    "id": script_result.id,
                    "name": script_result.name,
                    "created": fmt_time(script_result.created),
                    "updated": fmt_time(script_result.updated),
                    "status": script_result.status,
                    "status_name": script_result.status_name,
                    "exit_status": script_result.exit_status,
                    "started": fmt_time(script_result.started),
                    "ended": fmt_time(script_result.ended),
                    "runtime": script_result.runtime,
                    "starttime": script_result.starttime,
                    "endtime": script_result.endtime,
                    "estimated_runtime": script_result.estimated_runtime,
                    "parameters": script_result.parameters,
                    "script_id": script_result.script_id,
                    "script_revision_id": script_result.script_version_id,
                    "suppressed": script_result.suppressed,
                },
                result,
            )
Exemple #8
0
 def test_PUT_admin_only(self):
     script = factory.make_Script()
     response = self.client.put(self.get_script_uri(script))
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
Exemple #9
0
 def test_revert_admin_only(self):
     script = factory.make_Script()
     response = self.client.post(self.get_script_uri(script),
                                 {'op': 'revert'})
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
Exemple #10
0
 def test_DELETE_admin_only(self):
     script = factory.make_Script()
     response = self.client.delete(self.get_script_uri(script))
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
     self.assertIsNotNone(reload_object(script))
Exemple #11
0
 def test_DELETE_prevents_deleting_default(self):
     self.become_admin()
     script = factory.make_Script(default=True)
     response = self.client.delete(self.get_script_uri(script))
     self.assertThat(response, HasStatusCode(http.client.BAD_REQUEST))
     self.assertIsNotNone(reload_object(script))
Exemple #12
0
 def test_POST_requires_admin(self):
     response = self.client.post(self.get_scripts_uri())
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
Exemple #13
0
 def test_get_api_version(self):
     response = self.client.get(reverse('api_version'))
     self.assertThat(response, HasStatusCode(http.client.OK))
     self.assertIn('text/plain', response['Content-Type'])
     self.assertEqual(b'2.0', response.content)
Exemple #14
0
 def get_api_results(self, *args, **kwargs):
     uri = get_discoveries_uri()
     response = self.client.get(uri, *args, **kwargs)
     self.assertThat(response, HasStatusCode(http.client.OK))
     results = json.loads(response.content.decode(settings.DEFAULT_CHARSET))
     return results
Exemple #15
0
 def test__method_not_allowed_on_delete(self):
     response = self.client.delete(reverse("csrf"))
     self.assertThat(response, HasStatusCode(HTTPStatus.METHOD_NOT_ALLOWED))
Exemple #16
0
 def test_revert_requires_to(self):
     self.become_admin()
     script = factory.make_Script()
     response = self.client.post(self.get_script_uri(script),
                                 {'op': 'revert'})
     self.assertThat(response, HasStatusCode(http.client.BAD_REQUEST))
Exemple #17
0
 def test__forbidden_when_not_authenticated(self):
     response = self.client.post(reverse("csrf"))
     self.assertThat(response, HasStatusCode(HTTPStatus.FORBIDDEN))
Exemple #18
0
 def test_api_doc_accessibility(self):
     self.patch(sys, "stderr", StringIO())
     response = self.client.get(reverse('api-doc'))
     self.assertThat(response, HasStatusCode(http.client.OK))
     # No error or warning are emitted by docutils.
     self.assertEqual("", sys.stderr.getvalue())
Exemple #19
0
    def test_PUT_include_output(self):
        self.become_admin()
        script_set = self.make_scriptset()
        script_results = {}
        for _ in range(3):
            script_result = factory.make_ScriptResult(script_set=script_set)
            script_results[script_result.name] = script_result

        response = self.client.put(self.get_script_result_uri(script_set),
                                   {"include_output": True})
        self.assertThat(response, HasStatusCode(http.client.OK))
        parsed_result = json_load_bytes(response.content)
        results = parsed_result.pop("results")

        self.assertDictEqual(
            {
                "id":
                script_set.id,
                "system_id":
                script_set.node.system_id,
                "type":
                script_set.result_type,
                "type_name":
                script_set.result_type_name,
                "last_ping":
                fmt_time(script_set.last_ping),
                "status":
                script_set.status,
                "status_name":
                script_set.status_name,
                "started":
                fmt_time(script_set.started),
                "ended":
                fmt_time(script_set.ended),
                "runtime":
                script_set.runtime,
                "resource_uri":
                "/MAAS/api/2.0/nodes/%s/results/%d/" %
                (script_set.node.system_id, script_set.id),
            },
            parsed_result,
        )
        for result in results:
            script_result = script_results[result["name"]]
            self.assertDictEqual(
                {
                    "id": script_result.id,
                    "name": script_result.name,
                    "created": fmt_time(script_result.created),
                    "updated": fmt_time(script_result.updated),
                    "status": script_result.status,
                    "status_name": script_result.status_name,
                    "exit_status": script_result.exit_status,
                    "started": fmt_time(script_result.started),
                    "ended": fmt_time(script_result.ended),
                    "runtime": script_result.runtime,
                    "starttime": script_result.starttime,
                    "endtime": script_result.endtime,
                    "estimated_runtime": script_result.estimated_runtime,
                    "parameters": script_result.parameters,
                    "script_id": script_result.script_id,
                    "script_revision_id": script_result.script_version_id,
                    "suppressed": script_result.suppressed,
                    "output": b64encode(script_result.output).decode(),
                    "stdout": b64encode(script_result.stdout).decode(),
                    "stderr": b64encode(script_result.stderr).decode(),
                    "result": b64encode(script_result.result).decode(),
                },
                result,
            )
Exemple #20
0
 def test_POST_is_forbidden(self):
     response = self.client.post(self.get_url(),
                                 {"name": factory.make_name("script")})
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
 def test_read(self):
     uri = get_notifications_uri()
     response = self.client.get(uri)
     self.assertThat(response, HasStatusCode(http.client.UNAUTHORIZED))
Exemple #22
0
 def test_GET_returns_script_contents(self):
     script = factory.make_Script(script_type=SCRIPT_TYPE.COMMISSIONING)
     response = self.client.get(self.get_url(script.name))
     self.assertThat(response, HasStatusCode(http.client.OK))
     self.assertEqual(script.script.data, response.content.decode("utf-8"))
 def test_dismiss_notification_for_self(self):
     notification = factory.make_Notification(user=self.user)
     uri = get_notification_uri(notification)
     response = self.client.post(uri, {"op": "dismiss"})
     self.assertThat(response, HasStatusCode(http.client.OK))
     self.assertThat(notification, HasBeenDismissedBy(self.user))
Exemple #24
0
 def test_DELETE_is_forbidden(self):
     script = factory.make_Script(script_type=SCRIPT_TYPE.COMMISSIONING)
     response = self.client.put(self.get_url(script.name))
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
 def test_read_notification_for_other(self):
     other = factory.make_User()
     notification = factory.make_Notification(user=other)
     uri = get_notification_uri(notification)
     response = self.client.get(uri)
     self.assertThat(response, HasStatusCode(http.client.UNAUTHORIZED))
Exemple #26
0
 def test_GET_is_forbidden(self):
     response = self.client.get(self.get_url())
     self.assertThat(response, HasStatusCode(http.client.FORBIDDEN))
 def test_update_is_for_admins_only(self):
     notification = factory.make_Notification()
     message_new = factory.make_name("message")
     uri = get_notification_uri(notification)
     response = self.client.put(uri, {"message": message_new})
     self.assertThat(response, HasStatusCode(http.client.UNAUTHORIZED))
Exemple #28
0
 def test__rejects_GET(self):
     response = self.client.get(reverse("authenticate"))
     self.assertThat(response, HasStatusCode(HTTPStatus.METHOD_NOT_ALLOWED))
     self.assertThat(response["Allow"], Equals("POST"))
Exemple #29
0
    def test_health_status(self):
        self.become_admin()
        machine = factory.make_Machine(owner=self.user)
        commissioning_script_set = factory.make_ScriptSet(
            result_type=RESULT_TYPE.COMMISSIONING, node=machine)
        testing_script_set = factory.make_ScriptSet(
            result_type=RESULT_TYPE.TESTING, node=machine)
        make_script_result = partial(
            factory.make_ScriptResult,
            script_set=testing_script_set,
            status=factory.pick_choice(SCRIPT_STATUS_CHOICES,
                                       but_not=[SCRIPT_STATUS.ABORTED]),
        )
        commissioning_script_result = make_script_result(
            script_set=commissioning_script_set,
            script=factory.make_Script(script_type=SCRIPT_TYPE.COMMISSIONING),
        )
        cpu_script_result = make_script_result(script=factory.make_Script(
            script_type=SCRIPT_TYPE.TESTING,
            hardware_type=HARDWARE_TYPE.CPU,
        ))
        memory_script_result = make_script_result(script=factory.make_Script(
            script_type=SCRIPT_TYPE.TESTING,
            hardware_type=HARDWARE_TYPE.MEMORY,
        ))
        network_script_result = make_script_result(script=factory.make_Script(
            script_type=SCRIPT_TYPE.TESTING,
            hardware_type=HARDWARE_TYPE.NETWORK,
        ))
        storage_script_result = make_script_result(script=factory.make_Script(
            script_type=SCRIPT_TYPE.TESTING,
            hardware_type=HARDWARE_TYPE.STORAGE,
        ))
        node_script_result = make_script_result(script=factory.make_Script(
            script_type=SCRIPT_TYPE.TESTING,
            hardware_type=HARDWARE_TYPE.NODE,
        ))
        interface_script_result = make_script_result(
            script=factory.make_Script(
                script_type=SCRIPT_TYPE.TESTING,
                hardware_type=HARDWARE_TYPE.NETWORK,
            ))
        testing_script_results = (
            machine.get_latest_testing_script_results.exclude(
                status=SCRIPT_STATUS.ABORTED))
        testing_status = get_status_from_qs(testing_script_results)

        response = self.client.get(self.get_node_uri(machine))
        parsed_result = json_load_bytes(response.content)

        def status(s):
            return get_status_from_qs([s])

        def status_name(s):
            return SCRIPT_STATUS_CHOICES[status(s)][1]

        self.assertThat(response, HasStatusCode(http.client.OK))
        self.assertEquals(
            status(commissioning_script_result),
            parsed_result["commissioning_status"],
        )
        self.assertEquals(
            status_name(commissioning_script_result),
            parsed_result["commissioning_status_name"],
        )
        self.assertEquals(testing_status, parsed_result["testing_status"])
        self.assertEquals(
            SCRIPT_STATUS_CHOICES[testing_status][1],
            parsed_result["testing_status_name"],
        )
        self.assertEquals(status(cpu_script_result),
                          parsed_result["cpu_test_status"])
        self.assertEquals(
            status_name(cpu_script_result),
            parsed_result["cpu_test_status_name"],
        )
        self.assertEquals(status(memory_script_result),
                          parsed_result["memory_test_status"])
        self.assertEquals(
            status_name(memory_script_result),
            parsed_result["memory_test_status_name"],
        )
        self.assertEquals(status(network_script_result),
                          parsed_result["network_test_status"])
        self.assertEquals(
            status_name(network_script_result),
            parsed_result["network_test_status_name"],
        )
        self.assertEquals(status(storage_script_result),
                          parsed_result["storage_test_status"])
        self.assertEquals(
            status_name(storage_script_result),
            parsed_result["storage_test_status_name"],
        )
        self.assertEquals(status(node_script_result),
                          parsed_result["other_test_status"])
        self.assertEquals(
            status_name(node_script_result),
            parsed_result["other_test_status_name"],
        )
        self.assertEquals(
            status(interface_script_result),
            parsed_result["interface_test_status"],
        )
        self.assertEquals(
            status_name(interface_script_result),
            parsed_result["interface_test_status_name"],
        )
Exemple #30
0
 def test__scan__with_no_cidrs_does_not_call_scan_all_networks(self):
     response = self.post_api_response({'op': 'scan'})
     self.assertThat(response, HasStatusCode(http.client.BAD_REQUEST))