deb-python-hplefthandclient/test/test_HPLeftHandClient_serve...

355 lines
14 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2009-2012 10gen, 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.
"""Test class of LeftHand Client handling servers """
import test_HPLeftHandClient_base
from hplefthandclient import exceptions
VOLUME_NAME1 = 'VOLUME1_UNIT_TEST_' + test_HPLeftHandClient_base.TIME
VOLUME_NAME2 = 'VOLUME2_UNIT_TEST_' + test_HPLeftHandClient_base.TIME
VOLUME_NAME3 = 'VOLUME3_UNIT_TEST_' + test_HPLeftHandClient_base.TIME
SERVER_NAME1 = 'SERVER1_UNIT_TEST_' + test_HPLeftHandClient_base.TIME
SERVER_NAME2 = 'SERVER2_UNIT_TEST_' + test_HPLeftHandClient_base.TIME
IQN1 = 'iqn.1993-08.org.debian:01:00000' + test_HPLeftHandClient_base.TIME
IQN2 = 'iqn.1993-08.org.debian:01:00001' + test_HPLeftHandClient_base.TIME
class HPLeftHandClientServerTestCase(test_HPLeftHandClient_base.
HPLeftHandClientBaseTestCase):
def setUp(self):
super(HPLeftHandClientServerTestCase, self).setUp()
try:
cluster_info = self.cl.getClusterByName(
test_HPLeftHandClient_base.
HPLeftHandClientBaseTestCase.cluster)
self.cluster_id = cluster_info['id']
except Exception:
pass
def tearDown(self):
try:
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
self.cl.deleteVolume(volume_info['id'])
except Exception:
pass
try:
volume_info = self.cl.getVolumeByName(VOLUME_NAME2)
self.cl.deleteVolume(volume_info['id'])
except Exception:
pass
try:
volume_info = self.cl.getVolumeByName(VOLUME_NAME3)
self.cl.deleteVolume(volume_info['id'])
except Exception:
pass
try:
server_info = self.cl.getServerByName(SERVER_NAME1)
self.cl.deleteServer(server_info['id'])
except Exception:
pass
try:
server_info = self.cl.getServerByName(SERVER_NAME2)
self.cl.deleteServer(server_info['id'])
except Exception:
pass
super(HPLeftHandClientServerTestCase, self).tearDown()
def test_1_create_server(self):
self.printHeader('create_server')
optional = {'description': "some comment"}
self.cl.createServer(SERVER_NAME1, IQN1, optional=optional)
self.printFooter('create_server')
def test_1_create_server_duplicate_name(self):
self.printHeader('create_server_duplicate_name')
optional = {'description': "some comment"}
self.cl.createServer(SERVER_NAME1, IQN1, optional=optional)
self.assertRaises(
exceptions.HTTPServerError,
self.cl.createServer,
SERVER_NAME1,
IQN1,
optional=optional)
self.printFooter('create_server_duplicate_name')
def test_1_create_server_missing_name(self):
self.printHeader('create_server_missing_name')
optional = {'description': "some comment"}
self.assertRaises(
exceptions.HTTPBadRequest,
self.cl.createServer,
None,
IQN1,
optional=optional)
self.printFooter('create_server_missing_name')
def test_2_add_server_access(self):
self.printHeader('add_server_access')
optional = {'description': 'test volume',
'isThinProvisioned': True}
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createServer(SERVER_NAME1, IQN1)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
server_info = self.cl.getServerByName(SERVER_NAME1)
self.cl.addServerAccess(volume_info['id'],
server_info['id'],
optional={'lun': 0})
# verify access was added
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
server_name = volume_info['volumeACL'][0]['server']['name']
self.assertEqual(SERVER_NAME1, server_name)
self.printFooter('add_server_access')
def test_2_add_server_access_already_exists(self):
self.printHeader('add_server_access_already_exists')
optional = {'description': 'test volume',
'isThinProvisioned': True}
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createServer(SERVER_NAME1, IQN1)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
server_info = self.cl.getServerByName(SERVER_NAME1)
self.cl.addServerAccess(volume_info['id'], server_info['id'])
self.assertRaises(
exceptions.HTTPServerError,
self.cl.addServerAccess,
volume_info['id'],
server_info['id']
)
self.printFooter('add_server_access_already_exists')
def test_2_add_server_access_missing_volume(self):
self.printHeader('add_server_access_missing_volume')
self.cl.createServer(SERVER_NAME1, IQN1)
server_info = self.cl.getServerByName(SERVER_NAME1)
self.assertRaises(
exceptions.HTTPServerError,
self.cl.addServerAccess,
self.MISSING_VOLUME_ID,
server_info['id'])
self.printFooter('add_server_access_missing_volume')
def test_2_add_server_access_missing_server(self):
self.printHeader('add_server_access_missing_server')
optional = {'description': 'test volume',
'isThinProvisioned': True}
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
self.assertRaises(
exceptions.HTTPServerError,
self.cl.addServerAccess,
volume_info['id'],
self.MISSING_SERVER_ID)
self.printFooter('add_server_access_missing_server')
def test_2_remove_server_access(self):
self.printHeader('remove_server_access')
optional = {'description': 'test volume',
'isThinProvisioned': True}
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createServer(SERVER_NAME1, IQN1)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
server_info = self.cl.getServerByName(SERVER_NAME1)
self.cl.addServerAccess(volume_info['id'],
server_info['id'],
optional={'lun': 0})
self.cl.removeServerAccess(volume_info['id'], server_info['id'])
# verify access was removed
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
print(volume_info)
self.assertIsNone(volume_info['volumeACL'])
self.printFooter('remove_server_access')
def test_2_remove_server_access_access_not_set(self):
self.printHeader('remove_server_access_access_not_set')
optional = {'description': 'test volume',
'isThinProvisioned': True}
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createServer(SERVER_NAME1, IQN1)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
server_info = self.cl.getServerByName(SERVER_NAME1)
self.cl.removeServerAccess(volume_info['id'], server_info['id'])
# No exception expected in this case
self.printFooter('remove_server_access_access_not_set')
def test_2_remove_server_access_missing_volume(self):
self.printHeader('remove_server_access_missing_volume')
self.cl.createServer(SERVER_NAME1, IQN1)
server_info = self.cl.getServerByName(SERVER_NAME1)
self.assertRaises(
exceptions.HTTPServerError,
self.cl.removeServerAccess,
self.MISSING_VOLUME_ID,
server_info['id'])
self.printFooter('remove_server_access_missing_volume')
def test_2_remove_server_access_missing_server(self):
self.printHeader('remove_server_access_missing_server')
optional = {'description': 'test volume',
'isThinProvisioned': True}
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
self.assertRaises(
exceptions.HTTPServerError,
self.cl.removeServerAccess,
volume_info['id'],
self.MISSING_SERVER_ID)
self.printFooter('remove_server_access_missing_server')
def test_3_find_server_volumes(self):
self.printHeader('find_server_volumes')
optional = {'description': 'test volume',
'isThinProvisioned': True}
# Create first volume and a server
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createServer(SERVER_NAME1, IQN1)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
server_info = self.cl.getServerByName(SERVER_NAME1)
result = self.cl.findServerVolumes(SERVER_NAME1)
volume_list = [vol['name'] for vol in result]
self.assertEqual(len(volume_list), 0)
# Add access to first volume
self.cl.addServerAccess(volume_info['id'], server_info['id'])
result = self.cl.findServerVolumes(SERVER_NAME1)
volume_list = [vol['name'] for vol in result]
self.assertEqual(len(volume_list), 1)
self.assertIn(VOLUME_NAME1, volume_list)
# Create second volume
self.cl.createVolume(VOLUME_NAME2, self.cluster_id,
self.GB_TO_BYTES, optional)
volume_info2 = self.cl.getVolumeByName(VOLUME_NAME2)
result = self.cl.findServerVolumes(SERVER_NAME1)
volume_list = [vol['name'] for vol in result]
self.assertEqual(len(volume_list), 1)
self.assertNotIn(VOLUME_NAME2, volume_list)
# Add access to second volume
self.cl.addServerAccess(volume_info2['id'], server_info['id'])
result = self.cl.findServerVolumes(SERVER_NAME1)
volume_list = [vol['name'] for vol in result]
self.assertEqual(len(volume_list), 2)
self.assertIn(VOLUME_NAME1, volume_list)
self.assertIn(VOLUME_NAME2, volume_list)
# Create third volume and a new server, add access
self.cl.createVolume(VOLUME_NAME3, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createServer(SERVER_NAME2, IQN2)
volume_info3 = self.cl.getVolumeByName(VOLUME_NAME3)
server_info2 = self.cl.getServerByName(SERVER_NAME2)
self.cl.addServerAccess(volume_info3['id'], server_info2['id'])
result = self.cl.findServerVolumes(SERVER_NAME2)
volume_list = [vol['name'] for vol in result]
self.assertEqual(len(volume_list), 1)
self.assertIn(VOLUME_NAME3, volume_list)
result = self.cl.findServerVolumes(SERVER_NAME1)
volume_list = [vol['name'] for vol in result]
self.assertEqual(len(volume_list), 2)
self.assertNotIn(VOLUME_NAME3, volume_list)
self.printFooter('find_server_volumes')
def test_3_find_server_volumes_empty(self):
self.printHeader('find_server_volumes_empty')
expected = []
optional = {'description': 'test volume',
'isThinProvisioned': True}
self.cl.createVolume(VOLUME_NAME1, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createVolume(VOLUME_NAME2, self.cluster_id,
self.GB_TO_BYTES, optional)
self.cl.createServer(SERVER_NAME1, IQN1)
volume_info = self.cl.getVolumeByName(VOLUME_NAME1)
server_info = self.cl.getServerByName(SERVER_NAME1)
self.cl.addServerAccess(volume_info['id'], server_info['id'])
volume_info = self.cl.getVolumeByName(VOLUME_NAME2)
self.cl.addServerAccess(volume_info['id'], server_info['id'])
result = self.cl.findServerVolumes('bogus_server')
self.assertEqual(expected, result)
self.printFooter('find_server_volumes_empty')
def test_4_get_servers(self):
self.printHeader('get_servers')
self.cl.createServer(SERVER_NAME1, IQN1)
result = self.cl.getServers()
self.assertTrue(self.findInDict(result['members'],
'name',
SERVER_NAME1))
self.printFooter('get_servers')
def test_4_get_server_by_name(self):
self.printHeader('get_server_by_name')
self.cl.createServer(SERVER_NAME1, IQN1)
result = self.cl.getServerByName(SERVER_NAME1)
self.assertEqual(SERVER_NAME1, result['name'])
self.printFooter('get_server_by_name')
def test_4_get_server_by_name_missing_server(self):
self.printHeader('get_server_by_name_missing_server')
self.assertRaises(
exceptions.HTTPNotFound,
self.cl.getServerByName,
'missing_server')
self.printFooter('get_server_by_name_missing_server')