Add API endpoints for hosts
This makes the API endpoints for hosts available for consumption. Change-Id: Ifab3b27e81b27808aa33f484e228b90356e2406c
This commit is contained in:
parent
5b301c3b4f
commit
ccffd48287
|
@ -105,6 +105,14 @@ class FileSerializer(serializers.ModelSerializer):
|
|||
content = FileContentField()
|
||||
|
||||
|
||||
class HostSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Host
|
||||
fields = '__all__'
|
||||
|
||||
facts = CompressedObjectField(default=zlib.compress(json.dumps({}).encode('utf8')))
|
||||
|
||||
|
||||
class ResultSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Result
|
||||
|
|
|
@ -51,3 +51,17 @@ class TaskFactory(factory.DjangoModelFactory):
|
|||
tags = b'x\x9c\x8bVJ\xcb\xcfW\xd2QPJJ,R\x8a\x05\x00\x1eH\x04\x06'
|
||||
play = factory.SubFactory(PlayFactory)
|
||||
file = factory.SubFactory(FileFactory)
|
||||
|
||||
|
||||
class HostFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = models.Host
|
||||
|
||||
facts = b'x\x9c\xabVJ\xcb\xcfW\xb2RPJJ,R\xaa\x05\x00 \x98\x04T'
|
||||
name = 'hostname'
|
||||
changed = 1
|
||||
failed = 0
|
||||
ok = 2
|
||||
skipped = 1
|
||||
unreachable = 0
|
||||
play = factory.SubFactory(PlayFactory)
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
from rest_framework.test import APITestCase
|
||||
|
||||
from ara.api import models, serializers
|
||||
from ara.api.tests import factories
|
||||
|
||||
|
||||
class HostTestCase(APITestCase):
|
||||
def test_host_factory(self):
|
||||
host = factories.HostFactory(name='testhost')
|
||||
self.assertEqual(host.name, 'testhost')
|
||||
|
||||
def test_host_serializer(self):
|
||||
play = factories.PlayFactory()
|
||||
serializer = serializers.HostSerializer(data={
|
||||
'name': 'serializer',
|
||||
'play': play.id
|
||||
})
|
||||
serializer.is_valid()
|
||||
host = serializer.save()
|
||||
host.refresh_from_db()
|
||||
self.assertEqual(host.name, 'serializer')
|
||||
self.assertEqual(host.play.id, play.id)
|
||||
|
||||
def test_host_serializer_compress_facts(self):
|
||||
play = factories.PlayFactory()
|
||||
serializer = serializers.HostSerializer(data={
|
||||
'name': 'compress',
|
||||
'facts': {'foo': 'bar'},
|
||||
'play': play.id,
|
||||
})
|
||||
serializer.is_valid()
|
||||
host = serializer.save()
|
||||
host.refresh_from_db()
|
||||
self.assertEqual(host.facts, b'x\x9c\xabVJ\xcb\xcfW\xb2RPJJ,R\xaa\x05\x00 \x98\x04T')
|
||||
|
||||
def test_host_serializer_decompress_facts(self):
|
||||
host = factories.HostFactory(facts=b'x\x9c\xabVJ\xcb\xcfW\xb2RPJJ,R\xaa\x05\x00 \x98\x04T')
|
||||
serializer = serializers.HostSerializer(instance=host)
|
||||
self.assertEqual(serializer.data['facts'], {'foo': 'bar'})
|
||||
|
||||
def test_get_no_hosts(self):
|
||||
request = self.client.get('/api/v1/hosts/')
|
||||
self.assertEqual(0, len(request.data['results']))
|
||||
|
||||
def test_get_hosts(self):
|
||||
host = factories.HostFactory()
|
||||
request = self.client.get('/api/v1/hosts/')
|
||||
self.assertEqual(1, len(request.data['results']))
|
||||
self.assertEqual(host.name, request.data['results'][0]['name'])
|
||||
|
||||
def test_delete_host(self):
|
||||
host = factories.HostFactory()
|
||||
self.assertEqual(1, models.Host.objects.all().count())
|
||||
request = self.client.delete('/api/v1/hosts/%s/' % host.id)
|
||||
self.assertEqual(204, request.status_code)
|
||||
self.assertEqual(0, models.Host.objects.all().count())
|
||||
|
||||
def test_create_host(self):
|
||||
play = factories.PlayFactory()
|
||||
self.assertEqual(0, models.Host.objects.count())
|
||||
request = self.client.post('/api/v1/hosts/', {
|
||||
'name': 'create',
|
||||
'play': play.id
|
||||
})
|
||||
self.assertEqual(201, request.status_code)
|
||||
self.assertEqual(1, models.Host.objects.count())
|
||||
|
||||
def test_partial_update_host(self):
|
||||
host = factories.HostFactory()
|
||||
self.assertNotEqual(1, host.ok)
|
||||
request = self.client.patch('/api/v1/hosts/%s/' % host.id, {
|
||||
'ok': 1
|
||||
})
|
||||
self.assertEqual(200, request.status_code)
|
||||
host_updated = models.Host.objects.get(id=host.id)
|
||||
self.assertEqual(1, host_updated.ok)
|
||||
|
||||
def test_get_host(self):
|
||||
host = factories.HostFactory()
|
||||
request = self.client.get('/api/v1/hosts/%s/' % host.id)
|
||||
self.assertEqual(host.name, request.data['name'])
|
|
@ -28,6 +28,8 @@ urlpatterns = [
|
|||
url(r'^plays/(?P<pk>[0-9]+)/$', views.PlayDetail.as_view(), name='play-detail'),
|
||||
url(r'^tasks/$', views.TaskList.as_view(), name='task-list'),
|
||||
url(r'^tasks/(?P<pk>[0-9]+)/$', views.TaskDetail.as_view(), name='task-detail'),
|
||||
url(r'^hosts/$', views.HostList.as_view(), name='host-list'),
|
||||
url(r'^hosts/(?P<pk>[0-9]+)/$', views.HostDetail.as_view(), name='host-detail'),
|
||||
url(r'^files/$', views.FileList.as_view(), name='file-list'),
|
||||
url(r'^files/(?P<pk>[0-9]+)/$', views.FileDetail.as_view(), name='file-detail'),
|
||||
]
|
||||
|
|
|
@ -29,7 +29,8 @@ def api_root(request, format=None):
|
|||
'playbooks': reverse('playbook-list', request=request, format=format),
|
||||
'plays': reverse('play-list', request=request, format=format),
|
||||
'tasks': reverse('task-list', request=request, format=format),
|
||||
'files': reverse('file-list', request=request, format=format)
|
||||
'files': reverse('file-list', request=request, format=format),
|
||||
'hosts': reverse('host-list', request=request, format=format)
|
||||
})
|
||||
|
||||
|
||||
|
@ -77,6 +78,16 @@ class TaskDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||
serializer_class = serializers.TaskSerializer
|
||||
|
||||
|
||||
class HostList(generics.ListCreateAPIView):
|
||||
queryset = models.Host.objects.all()
|
||||
serializer_class = serializers.HostSerializer
|
||||
|
||||
|
||||
class HostDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||
queryset = models.Host.objects.all()
|
||||
serializer_class = serializers.HostSerializer
|
||||
|
||||
|
||||
class FileList(generics.ListCreateAPIView):
|
||||
queryset = models.File.objects.all()
|
||||
serializer_class = serializers.FileSerializer
|
||||
|
|
Loading…
Reference in New Issue