# Copyright (c) 2014 NetApp, Inc. # All Rights Reserved. # # 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. """Tests for the ShareServer and ShareServerBackendDetails tables.""" from oslo_utils import uuidutils from manila.common import constants from manila import context from manila import db from manila import exception from manila import test class ShareServerTableTestCase(test.TestCase): def setUp(self): super(ShareServerTableTestCase, self).setUp() self.ctxt = context.RequestContext(user_id='user_id', project_id='project_id', is_admin=True) def _create_share_server(self, values=None): if not values: values = { 'share_network_id': uuidutils.generate_uuid(), 'host': 'host1', 'status': constants.STATUS_ACTIVE, } return db.share_server_create(self.ctxt, values) def test_share_server_get(self): values = { 'share_network_id': 'fake-share-net-id', 'host': 'hostname', 'status': constants.STATUS_ACTIVE } expected = self._create_share_server(values) server = db.share_server_get(self.ctxt, expected['id']) self.assertEqual(expected['id'], server['id']) self.assertEqual(server.share_network_id, expected.share_network_id) self.assertEqual(server.host, expected.host) self.assertEqual(server.status, expected.status) def test_share_get_not_found(self): fake_id = 'FAKE_UUID' self.assertRaises(exception.ShareServerNotFound, db.share_server_get, self.ctxt, fake_id) def test_share_server_create(self): values = { 'share_network_id': 'fake-share-net-id', 'host': 'hostname', 'status': constants.STATUS_ACTIVE, } server = self._create_share_server(values) self.assertTrue(server['id']) self.assertEqual(server.share_network_id, values['share_network_id']) self.assertEqual(server.host, values['host']) self.assertEqual(server.status, values['status']) def test_share_server_delete(self): server = self._create_share_server() num_records = len(db.share_server_get_all(self.ctxt)) db.share_server_delete(self.ctxt, server['id']) self.assertEqual(len(db.share_server_get_all(self.ctxt)), num_records - 1) def test_share_server_delete_not_found(self): fake_id = 'FAKE_UUID' self.assertRaises(exception.ShareServerNotFound, db.share_server_delete, self.ctxt, fake_id) def test_share_server_update(self): update = { 'share_network_id': 'update_net', 'host': 'update_host', 'status': constants.STATUS_ACTIVE, } server = self._create_share_server() updated_server = db.share_server_update(self.ctxt, server['id'], update) self.assertEqual(server['id'], updated_server['id']) self.assertEqual(updated_server.share_network_id, update['share_network_id']) self.assertEqual(updated_server.host, update['host']) self.assertEqual(updated_server.status, update['status']) def test_share_server_update_not_found(self): fake_id = 'FAKE_UUID' self.assertRaises(exception.ShareServerNotFound, db.share_server_update, self.ctxt, fake_id, {}) def test_share_server_get_all_by_host_and_share_net_valid(self): valid = { 'share_network_id': '1', 'host': 'host1', 'status': constants.STATUS_ACTIVE, } invalid = { 'share_network_id': '1', 'host': 'host1', 'status': constants.STATUS_ERROR, } other = { 'share_network_id': '2', 'host': 'host2', 'status': constants.STATUS_ACTIVE, } valid = self._create_share_server(valid) self._create_share_server(invalid) self._create_share_server(other) servers = db.share_server_get_all_by_host_and_share_net_valid( self.ctxt, host='host1', share_net_id='1') self.assertEqual(servers[0]['id'], valid['id']) def test_share_server_get_all_by_host_and_share_net_not_found(self): self.assertRaises(exception.ShareServerNotFound, db.share_server_get_all_by_host_and_share_net_valid, self.ctxt, host='fake', share_net_id='fake') def test_share_server_get_all(self): srv1 = { 'share_network_id': '1', 'host': 'host1', 'status': constants.STATUS_ACTIVE, } srv2 = { 'share_network_id': '1', 'host': 'host1', 'status': constants.STATUS_ERROR, } srv3 = { 'share_network_id': '2', 'host': 'host2', 'status': constants.STATUS_ACTIVE, } servers = db.share_server_get_all(self.ctxt) self.assertEqual(len(servers), 0) to_delete = self._create_share_server(srv1) self._create_share_server(srv2) self._create_share_server(srv3) servers = db.share_server_get_all(self.ctxt) self.assertEqual(len(servers), 3) db.share_server_delete(self.ctxt, to_delete['id']) servers = db.share_server_get_all(self.ctxt) self.assertEqual(len(servers), 2) def test_share_server_backend_details_set(self): details = { 'value1': '1', 'value2': '2', } server = self._create_share_server() db.share_server_backend_details_set(self.ctxt, server['id'], details) self.assertDictMatch( details, db.share_server_get(self.ctxt, server['id'])['backend_details'] ) def test_share_server_backend_details_set_not_found(self): fake_id = 'FAKE_UUID' self.assertRaises(exception.ShareServerNotFound, db.share_server_backend_details_set, self.ctxt, fake_id, {}) def test_share_server_get_with_details(self): values = { 'share_network_id': 'fake-share-net-id', 'host': 'hostname', 'status': constants.STATUS_ACTIVE, } details = { 'value1': '1', 'value2': '2', } srv_id = self._create_share_server(values)['id'] db.share_server_backend_details_set(self.ctxt, srv_id, details) server = db.share_server_get(self.ctxt, srv_id) self.assertEqual(srv_id, server['id']) self.assertEqual(server.share_network_id, values['share_network_id']) self.assertEqual(server.host, values['host']) self.assertEqual(server.status, values['status']) self.assertDictMatch(details, server['backend_details']) self.assertTrue('backend_details' in server.to_dict()) def test_share_server_delete_with_details(self): server = self._create_share_server() details = { 'value1': '1', 'value2': '2', } db.share_server_backend_details_set(self.ctxt, server['id'], details) num_records = len(db.share_server_get_all(self.ctxt)) db.share_server_delete(self.ctxt, server['id']) self.assertEqual(len(db.share_server_get_all(self.ctxt)), num_records - 1)