Beispiel #1
0
    def test_get_result_order(self):
        old_started = timezone.now() - datetime.timedelta(hours=12)
        old_ended = old_started + datetime.timedelta(minutes=30)
        old_result = factories.ResultFactory(started=old_started,
                                             ended=old_ended)
        new_started = timezone.now() - datetime.timedelta(hours=6)
        new_ended = new_started + datetime.timedelta(hours=1)
        new_result = factories.ResultFactory(started=new_started,
                                             ended=new_ended)

        # Ensure we have two objects
        request = self.client.get("/api/v1/results")
        self.assertEqual(2, len(request.data["results"]))

        order_fields = [
            "id", "created", "updated", "started", "ended", "duration"
        ]
        # Ascending order
        for field in order_fields:
            request = self.client.get("/api/v1/results?order=%s" % field)
            self.assertEqual(request.data["results"][0]["id"], old_result.id)

        # Descending order
        for field in order_fields:
            request = self.client.get("/api/v1/results?order=-%s" % field)
            self.assertEqual(request.data["results"][0]["id"], new_result.id)
Beispiel #2
0
    def test_get_result_by_association(self):
        # Create two results in necessarily two different playbooks with different children:
        # playbook -> play -> task -> result <- host
        first_result = factories.ResultFactory()
        second_result = factories.ResultFactory()

        # the fields with the association ids
        associations = ["playbook", "play", "task", "host"]

        # Validate that we somehow didn't wind up with the same association ids
        for association in associations:
            first = getattr(first_result, association)
            second = getattr(second_result, association)
            self.assertNotEqual(first.id, second.id)

        # In other words, there must be two distinct results
        request = self.client.get("/api/v1/results")
        self.assertEqual(2, request.data["count"])
        self.assertEqual(2, len(request.data["results"]))

        # Searching for the first_result associations should only yield one result
        for association in associations:
            assoc_id = getattr(first_result, association).id
            results = self.client.get("/api/v1/results?%s=%s" %
                                      (association, assoc_id))
            self.assertEqual(1, results.data["count"])
            self.assertEqual(1, len(results.data["results"]))
            self.assertEqual(assoc_id, results.data["results"][0][association])
Beispiel #3
0
 def test_get_result_by_playbook(self):
     playbook = factories.PlaybookFactory()
     host_one = factories.HostFactory(name="one")
     host_two = factories.HostFactory(name="two")
     result = factories.ResultFactory(playbook=playbook, host=host_one, status="failed")
     factories.ResultFactory(playbook=playbook, host=host_two, status="skipped")
     request = self.client.get("/api/v1/results?playbook=%s" % playbook.id)
     self.assertEqual(2, len(request.data["results"]))
     self.assertEqual(result.status, request.data["results"][1]["status"])
     self.assertEqual("skipped", request.data["results"][0]["status"])
Beispiel #4
0
 def test_get_result_duration(self):
     started = timezone.now()
     ended = started + datetime.timedelta(hours=1)
     result = factories.ResultFactory(started=started, ended=ended)
     request = self.client.get("/api/v1/results/%s" % result.id)
     self.assertEqual(parse_duration(request.data["duration"]),
                      ended - started)
Beispiel #5
0
 def test_partial_update_result(self):
     result = factories.ResultFactory()
     self.assertNotEqual("unreachable", result.status)
     request = self.client.patch("/api/v1/results/%s" % result.id, {"status": "unreachable"})
     self.assertEqual(200, request.status_code)
     result_updated = models.Result.objects.get(id=result.id)
     self.assertEqual("unreachable", result_updated.status)
Beispiel #6
0
    def test_get_result_with_ignore_errors(self):
        failed = factories.ResultFactory(status="failed", ignore_errors=False)
        ignored = factories.ResultFactory(status="failed", ignore_errors=True)

        # Searching for failed should return both
        results = self.client.get("/api/v1/results?status=failed").data["results"]
        self.assertEqual(2, len(results))

        # Searching for failed with ignore_errors=True should only return the ignored result
        results = self.client.get("/api/v1/results?status=failed&ignore_errors=true").data["results"]
        self.assertEqual(1, len(results))
        self.assertEqual(ignored.id, results[0]["id"])

        # Searching for failed with ignore_errors=False should only return the failed result
        results = self.client.get("/api/v1/results?status=failed&ignore_errors=false").data["results"]
        self.assertEqual(1, len(results))
        self.assertEqual(failed.id, results[0]["id"])
Beispiel #7
0
    def test_get_changed_results(self):
        changed_result = factories.ResultFactory(changed=True)
        unchanged_result = factories.ResultFactory(changed=False)

        # Assert two results
        results = self.client.get("/api/v1/results").data["results"]
        self.assertEqual(2, len(results))

        # Assert one changed
        results = self.client.get(
            "/api/v1/results?changed=true").data["results"]
        self.assertEqual(1, len(results))
        self.assertEqual(results[0]["id"], changed_result.id)

        # Assert one unchanged
        results = self.client.get(
            "/api/v1/results?changed=false").data["results"]
        self.assertEqual(1, len(results))
        self.assertEqual(results[0]["id"], unchanged_result.id)
Beispiel #8
0
    def test_get_result_by_statuses(self):
        failed_result = factories.ResultFactory(status="failed")
        skipped_result = factories.ResultFactory(status="skipped")
        factories.ResultFactory(status="ok")
        results = self.client.get("/api/v1/results").data["results"]
        self.assertEqual(3, len(results))

        results = self.client.get("/api/v1/results?status=failed").data["results"]
        self.assertEqual(1, len(results))
        self.assertEqual(failed_result.status, results[0]["status"])

        results = self.client.get("/api/v1/results?status=skipped").data["results"]
        self.assertEqual(1, len(results))
        self.assertEqual(skipped_result.status, results[0]["status"])

        results = self.client.get("/api/v1/results?status=failed&status=skipped").data["results"]
        self.assertEqual(2, len(results))
        self.assertEqual(failed_result.status, results[1]["status"])
        self.assertEqual(skipped_result.status, results[0]["status"])
Beispiel #9
0
    def test_get_result_by_date(self):
        result = factories.ResultFactory()

        past = datetime.datetime.now() - datetime.timedelta(hours=12)
        negative_date_fields = ["created_before", "started_before", "updated_before"]
        positive_date_fields = ["created_after", "started_after", "updated_after"]

        # Expect no result when searching before it was created
        for field in negative_date_fields:
            request = self.client.get("/api/v1/results?%s=%s" % (field, past.isoformat()))
            self.assertEqual(request.data["count"], 0)

        # Expect a result when searching after it was created
        for field in positive_date_fields:
            request = self.client.get("/api/v1/results?%s=%s" % (field, past.isoformat()))
            self.assertEqual(request.data["count"], 1)
            self.assertEqual(request.data["results"][0]["id"], result.id)
Beispiel #10
0
    def test_result_status_serializer(self):
        ok = factories.ResultFactory(status="ok")
        result = self.client.get("/api/v1/results/%s" % ok.id)
        self.assertEqual(result.data["status"], "ok")

        changed = factories.ResultFactory(status="ok", changed=True)
        result = self.client.get("/api/v1/results/%s" % changed.id)
        self.assertEqual(result.data["status"], "changed")

        failed = factories.ResultFactory(status="failed")
        result = self.client.get("/api/v1/results/%s" % failed.id)
        self.assertEqual(result.data["status"], "failed")

        ignored = factories.ResultFactory(status="failed", ignore_errors=True)
        result = self.client.get("/api/v1/results/%s" % ignored.id)
        self.assertEqual(result.data["status"], "ignored")

        skipped = factories.ResultFactory(status="skipped")
        result = self.client.get("/api/v1/results/%s" % skipped.id)
        self.assertEqual(result.data["status"], "skipped")

        unreachable = factories.ResultFactory(status="unreachable")
        result = self.client.get("/api/v1/results/%s" % unreachable.id)
        self.assertEqual(result.data["status"], "unreachable")
Beispiel #11
0
 def test_delete_result(self):
     result = factories.ResultFactory()
     self.assertEqual(1, models.Result.objects.all().count())
     request = self.client.delete("/api/v1/results/%s" % result.id)
     self.assertEqual(204, request.status_code)
     self.assertEqual(0, models.Result.objects.all().count())
Beispiel #12
0
 def test_get_results(self):
     result = factories.ResultFactory()
     request = self.client.get("/api/v1/results")
     self.assertEqual(1, len(request.data["results"]))
     self.assertEqual(result.status, request.data["results"][0]["status"])
Beispiel #13
0
 def test_result_serializer_decompress_content(self):
     result = factories.ResultFactory(
         content=utils.compressed_obj(factories.RESULT_CONTENTS))
     serializer = serializers.ResultSerializer(instance=result)
     self.assertEqual(serializer.data["content"], factories.RESULT_CONTENTS)
Beispiel #14
0
 def test_get_playbook_arguments(self):
     result = factories.ResultFactory()
     request = self.client.get("/api/v1/results/%s" % result.id)
     self.assertIn("inventory", request.data["playbook"]["arguments"])
Beispiel #15
0
 def test_result_factory(self):
     result = factories.ResultFactory(status="failed")
     self.assertEqual(result.status, "failed")
Beispiel #16
0
 def test_get_result(self):
     result = factories.ResultFactory()
     request = self.client.get("/api/v1/results/%s" % result.id)
     self.assertEqual(result.status, request.data["status"])