fuel-web/nailgun/nailgun/test/integration/test_node_handler.py

131 lines
4.8 KiB
Python

# -*- coding: utf-8 -*-
# Copyright 2013 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import json
from nailgun.db.sqlalchemy.models import Node
from nailgun.test.base import BaseIntegrationTest
from nailgun.test.base import reverse
class TestHandlers(BaseIntegrationTest):
def test_node_get(self):
node = self.env.create_node(api=False)
resp = self.app.get(
reverse('NodeHandler', kwargs={'node_id': node.id}),
headers=self.default_headers)
self.assertEquals(200, resp.status_code)
response = json.loads(resp.body)
self.assertEquals(node.id, response['id'])
self.assertEquals(node.name, response['name'])
self.assertEquals(node.mac, response['mac'])
self.assertEquals(
node.pending_addition, response['pending_addition'])
self.assertEquals(
node.pending_deletion, response['pending_deletion'])
self.assertEquals(node.status, response['status'])
self.assertEquals(
node.meta['cpu']['total'],
response['meta']['cpu']['total']
)
self.assertEquals(node.meta['disks'], response['meta']['disks'])
self.assertEquals(node.meta['memory'], response['meta']['memory'])
def test_node_creation_with_id(self):
node_id = '080000000003'
resp = self.app.post(
reverse('NodeCollectionHandler'),
json.dumps({'id': node_id,
'mac': 'ASDFAAASDFAA',
'status': 'discover'}),
headers=self.default_headers,
expect_errors=True)
# we now just ignore 'id' if present
self.assertEquals(201, resp.status_code)
def test_node_deletion(self):
node = self.env.create_node(api=False)
resp = self.app.delete(
reverse('NodeHandler', kwargs={'node_id': node.id}),
"",
headers=self.default_headers,
expect_errors=True
)
self.assertEquals(resp.status_code, 204)
def test_node_valid_metadata_gets_updated(self):
new_metadata = self.env.default_metadata()
node = self.env.create_node(api=False)
resp = self.app.put(
reverse('NodeHandler', kwargs={'node_id': node.id}),
json.dumps({'meta': new_metadata}),
headers=self.default_headers)
self.assertEquals(resp.status_code, 200)
self.db.refresh(node)
nodes = self.db.query(Node).filter(
Node.id == node.id
).all()
self.assertEquals(len(nodes), 1)
self.assertEquals(nodes[0].meta, new_metadata)
def test_node_valid_status_gets_updated(self):
node = self.env.create_node(api=False)
params = {'status': 'error'}
resp = self.app.put(
reverse('NodeHandler', kwargs={'node_id': node.id}),
json.dumps(params),
headers=self.default_headers)
self.assertEquals(resp.status_code, 200)
def test_node_action_flags_are_set(self):
flags = ['pending_addition', 'pending_deletion']
node = self.env.create_node(api=False)
for flag in flags:
resp = self.app.put(
reverse('NodeHandler', kwargs={'node_id': node.id}),
json.dumps({flag: True}),
headers=self.default_headers
)
self.assertEquals(resp.status_code, 200)
self.db.refresh(node)
node_from_db = self.db.query(Node).filter(
Node.id == node.id
).first()
for flag in flags:
self.assertEquals(getattr(node_from_db, flag), True)
def test_put_returns_400_if_no_body(self):
node = self.env.create_node(api=False)
resp = self.app.put(
reverse('NodeHandler', kwargs={'node_id': node.id}),
"",
headers=self.default_headers,
expect_errors=True)
self.assertEquals(resp.status_code, 400)
def test_put_returns_400_if_wrong_status(self):
node = self.env.create_node(api=False)
params = {'status': 'invalid_status'}
resp = self.app.put(
reverse('NodeHandler', kwargs={'node_id': node.id}),
json.dumps(params),
headers=self.default_headers,
expect_errors=True)
self.assertEquals(resp.status_code, 400)