Add more methods and tests

This commit is contained in:
Endre Karlson 2012-11-07 11:34:36 +01:00
parent 0b0915a327
commit 7cb8c8766f
6 changed files with 349 additions and 34 deletions

View File

@ -56,6 +56,68 @@ def delete_rate(rate_id):
central_api.delete_rate(context, rate_id)
@blueprint.route('/accounts', methods=['POST'])
def add_account():
context = flask.request.environ.get('context')
values = flask.request.json
account = central_api.add_account(context, values)
return flask.jsonify(account=account)
@blueprint.route('/accounts', methods=['GET'])
def get_accounts():
context = flask.request.environ.get('context')
accounts = central_api.get_accounts(context)
return flask.jsonify(accounts=accounts)
@blueprint.route('/accounts/<account_id>', methods=['PUT'])
def update_account(account_id):
context = flask.request.environ.get('context')
values = flask.request.json
account = central_api.update_account(context, account_id, values)
return flask.jsonify(account=account)
@blueprint.route('/accounts/<account_id>', methods=['DELETE'])
def delete_account(account_id):
context = flask.request.environ.get('context')
central_api.delete_account(context, account_id)
@blueprint.route('/system_accounts', methods=['POST'])
def add_system_account():
context = flask.request.environ.get('context')
values = flask.request.json
account = central_api.add_system_account(context, values)
return flask.jsonify(system_account=account)
@blueprint.route('/system_accounts', methods=['GET'])
def get_system_accounts():
context = flask.request.environ.get('context')
accounts = central_api.get_system_accounts(context)
return flask.jsonify(system_accounts=accounts)
@blueprint.route('/system_accounts/<account_id>', methods=['PUT'])
def update_system_account(account_id):
context = flask.request.environ.get('context')
values = flask.request.json
account = central_api.update_system_account(context, account_id, values)
return flask.jsonify(system_account=account)
@blueprint.route('/system_accounts/<account_id>', methods=['DELETE'])
def delete_system_account(account_id):
context = flask.request.environ.get('context')
central_api.delete_account(context, account_id)
@blueprint.route('/record', methods=['POST'])
def process_record():
context = flask.request.environ.get('context')

View File

@ -34,6 +34,16 @@ def add_rate(context, values):
return RPC.call(context, msg)
def get_rate(context, rate_id):
msg = {
"method": "get_rate",
"args": {
"rate_id": rate_id
}
}
return RPC.call(context, msg)
def get_rates(context):
msg = {
"method": "get_rates",
@ -62,6 +72,102 @@ def delete_rate(context, rate_id):
return RPC.call(context, msg)
def add_account(context, values):
msg = {
"method": "add_account",
"args": {
"values": values
}
}
return RPC.call(context, msg)
def get_account(context, account_id):
msg = {
"method": "get_account",
"args": {
"account_id": account_id
}
}
return RPC.call(context, msg)
def get_accounts(context):
msg = {
"method": "get_accounts",
}
return RPC.call(context, msg)
def update_account(context, account_id, values):
msg = {
"method": "update_account",
"args": {
"account_id": account_id,
"values": values
}
}
return RPC.call(context, msg)
def delete_account(context, rate_id):
msg = {
"method": "delete_account",
"args": {
"account_id": account_id
}
}
return RPC.call(context, msg)
def add_system_account(context, values):
msg = {
"method": "add_system_account",
"args": {
"values": values
}
}
return RPC.call(context, msg)
def get_system_account(context, account_id):
msg = {
"method": "get_system_account",
"args": {
"account_id": account_id
}
}
return RPC.call(context, msg)
def get_system_accounts(context):
msg = {
"method": "get_system_accounts",
}
return RPC.call(context, msg)
def update_system_account(context, account_id, values):
msg = {
"method": "update_system_account",
"args": {
"account_id": account_id,
"values": values
}
}
return RPC.call(context, msg)
def delete_system_account(context, account_id):
msg = {
"method": "delete_system_account",
"args": {
"account_id": account_id
}
}
return RPC.call(context, msg)
def process_record(context, values):
msg = {
"method": "process_record",

View File

@ -17,6 +17,7 @@
from bufunfa.openstack.common import cfg
from bufunfa.openstack.common import log
from bufunfa.openstack.common.rpc import service as rpc_service
from bufunfa import exceptions
from bufunfa import storage
from bufunfa import utils
@ -37,6 +38,9 @@ class Service(rpc_service.Service):
def add_rate(self, context, values):
return self.storage_conn.add_rate(context, values)
def get_rate(self, context, rate_id):
return self.storage_conn.get_rate(context, rate_id)
def get_rates(self, context):
return self.storage_conn.get_rates(context)
@ -46,5 +50,51 @@ class Service(rpc_service.Service):
def delete_rate(self, context, rate_id):
return self.storage_conn.delete_rate(context, rate_id)
def add_account(self, context, values):
return self.storage_conn.add_account(context, values)
def get_account(self, context, account_id):
return self.storage_conn.get_account(context, account_id)
def get_accounts(self, context):
return self.storage_conn.get_accounts(context)
def update_account(self, context, account_id, values):
return self.storage_conn.update_account(context, account_id, values)
def delete_account(self, context, account_id):
return self.storage_conn.delete_rate(context, account_id)
def add_system_account(self, context, values):
return self.storage_conn.add_system_account(context, values)
def get_system_account(self, context, account_id):
return self.storage_conn.get_system_account(context, account_id)
def get_system_accounts(self, context):
return self.storage_conn.get_system_accounts(context)
def update_system_account(self, context, account_id, values):
return self.storage_conn.update_account(context, account_id, values)
def delete_system_account(self, context, account_id):
return self.storage_conn.delete_rate(context, account_id)
def process_records(self, context, records):
"""
Process records in a batch
"""
for record in records:
self.process_record(context, record)
def process_record(self, context, values):
return self.storage_conn.process_record(context, values)
# NOTE: Add the system if it doesn't exist..
try:
self.storage_conn.get_system_account(
context, values['account_id'])
except exceptions.NotFound:
self.storage_conn.add_system_account(
context,
{'id': values['account_id']})
self.storage_conn.add_record(context, values)

View File

@ -62,7 +62,7 @@ class Connection(base.Connection):
""" Semi-Private Method to reset the database schema """
models.Base.metadata.drop_all(self.session.bind)
def _get_id(self, context, model, id):
def _get_id(self, model, context, id):
"""
Helper to not write the same code x times
"""
@ -73,14 +73,14 @@ class Connection(base.Connection):
else:
return obj
def _add(self, context, model, values):
def _add(self, model, context, values):
obj = model()
obj.update(values)
obj.save(self.session)
return obj
def _update(self, context, model, id, values):
obj = self._get_id(context, model, id)
def _update(self, model, context, id, values):
obj = self._get_id(model, context, id)
obj.update(values)
try:
obj.save(self.session)
@ -94,42 +94,60 @@ class Connection(base.Connection):
else:
return self._update(context, model, values, id)
# NOTE: Rates
def add_rate(self, context, values, session=None):
return self._add(context, models.Rate, values)
def add_rate(self, context, values):
return self._add(models.Rate, context, values)
def get_rates(self, context, session=None):
def get_rate(self, context, rate_id):
return self._get_id(models.Rate, context, rate_id)
def get_rates(self, context):
query = self.session.query(models.Rate)
return [row2dict(row) for row in query.all()]
def update_rate(self, context, rate_id, values):
return self._update(context, models.Rate, rate_id, values)
return self._update(models.Rate, context, rate_id, values)
def delete_rate(self, context, rate_id):
obj = self._get_id(context, models.Rate, rate_id)
obj = self._get_id(models.Rate, context, rate_id)
obj.delete(self.session)
# NOTE: System Accounts
def add_system_account(self, context, values, session=None):
return self._add(context, models.SystemAccount, values)
def add_account(self, context, values):
return self._add(models.Account, context, values)
def get_system_account(self, context, account_id, session=None):
return self._get_id(context, models.SystemAccount, account_id)
def get_account(self, context, account_id):
return self._get_id(models.Account, context, account_id)
def get_systems_account(self, context, session=None):
def get_accounts(self, conetxt):
query = self.session.query(models.Account)
return [row2dict(row) for row in query.all()]
def update_account(self, context, account_id, values):
return self._update(models.Account, context, account_id, values)
def delete_account(self, context, account_id):
obj = self._get_id(models.Account, context, account_id)
obj.delete(self.session)
def add_system_account(self, context, values):
return self._add(models.SystemAccount, context, values)
def get_system_account(self, context, account_id):
return self._get_id(models.SystemAccount, context, account_id)
def get_system_accounts(self, context):
query = self.session.query(models.SystemAccount)
return [row2dict(row) for row in query.all()]
def update_system_account(self, context, account_id, values):
return self._update(context, models.SystemAccount, account_id, values)
return self._update(models.SystemAccount, context, account_id, values)
def delete_system_account(self, context, account_id):
obj = self._get_id(context, models.SystemAccount, account_id)
obj = self._get_id(models.SystemAccount, context, account_id)
obj.delete(self.session)
# NOTE: Records
def add_record(self, context, values):
self._add(context, models.Record, values)
self._add(models.Record, context, values)
def row2dict(row):

View File

@ -13,6 +13,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime, timedelta
import random
from bufunfa.openstack.common import log as logging
from bufunfa.tests.test_central import CentralTestCase
@ -24,7 +25,25 @@ LOG = logging.getLogger(__name__)
class ServiceTest(CentralTestCase):
__test__ = True
record = {
'resource_id': '0cc13414-905d-4563-b61a-e80702566fd5',
'type': 'instance',
'volume': 3.5,
'start_timestamp': datetime.now() - timedelta(1),
'end_timestamp': datetime.now(),
'account_id': 'c97027dd880d4c129ae7a4ba7edade05'
}
def setUp(self):
super(ServiceTest, self).setUp()
self.config(rpc_backend='bufunfa.openstack.common.rpc.impl_fake')
self.service = self.get_central_service()
self.admin_context = self.get_admin_context()
def test_process_record_unexisting_system(self):
self.service.process_record(
self.admin_context, self.record)
system = self.service.storage_conn.get_system_account(
self.admin_context, self.record['account_id'])
self.assertEquals(system.id, self.record['account_id'])

View File

@ -40,6 +40,22 @@ class StorageDriverTestCase(StorageTestCase):
{'name': 'memory', 'value': 2}
]
account_fixtures = [
{'name': 'customer_a'},
{'name': 'customer_b'}
]
system_account_fixtures = [
{
'id': 'd44f1779-5034-455e-b334-cac2ac3eee33',
'name': 'system_a'
},
{
'id': 'a45e43af-090b-4045-ae78-6a9d507d1418',
'name': 'system_b'
}
]
def setUp(self):
super(StorageDriverTestCase, self).setUp()
self.storage_conn = self.get_storage_driver()
@ -48,32 +64,76 @@ class StorageDriverTestCase(StorageTestCase):
def test_init(self):
self.get_storage_driver()
def add_rate_fixtures(self, fixture=0, values={}):
def add_rate_fixture(self, context=None, fixture=0, values={}):
context = context or self.admin_context
_values = copy.copy(self.rate_fixtures[fixture])
_values.update(values)
return self.storage_conn.add_rate(self.admin_context, _values)
return self.storage_conn.add_rate(context, _values)
def add_account_fixture(self, context=None, fixture=0, values={}):
context = context or self.admin_context
_values = copy.copy(self.account_fixtures[fixture])
_values.update(values)
return self.storage_conn.add_account(context, _values)
def add_system_account_fixture(self, context=None, fixture=0, values={}):
context = context or self.admin_context
_values = copy.copy(self.system_account_fixtures[fixture])
_values.update(values)
return self.storage_conn.add_system_account(context, _values)
def test_add_rate(self):
rate = self.storage_conn.add_rate(
self.admin_context,
{'name': 'cpu', 'value': 1})
self.assertEquals(rate.name, 'cpu')
self.assertEquals(rate.value, 1)
rate = self.add_rate_fixture()
self.assertEquals(rate.name, self.rate_fixtures[0]['name'])
self.assertEquals(rate.value, self.rate_fixtures[0]['value'])
def test_delete_rate(self):
# NOTE: Needs fixing - get_rate is missing
rate = self.storage_conn.add_rate(
self.admin_context,
{'name': 'cpu', 'value': 1})
rate = self.add_rate_fixture()
self.storage_conn.delete_rate(self.admin_context, rate.id)
with self.assertRaises(exceptions.NotFound):
self.storage_conn.get_rate(self.admin_context, rate.id)
def test_update_rate(self):
rate = self.storage_conn.add_rate(
self.admin_context,
{'name': 'cpu', 'value': 1})
rate = self.add_rate_fixture()
self.storage_conn.update_rate(
self.admin_context,
rate.id,
values={'name': 'memory', 'value': 15})
self.assertEquals(rate.name, 'memory')
self.assertEquals(rate.value, 15)
def test_add_account(self):
account = self.add_account_fixture()
self.assertEquals(account.name, self.account_fixtures[0]['name'])
def test_delete_account(self):
account = self.add_account_fixture()
self.storage_conn.delete_account(self.admin_context, account.id)
with self.assertRaises(exceptions.NotFound):
self.storage_conn.get_account(self.admin_context, account.id)
def test_update_account(self):
account = self.add_account_fixture()
self.storage_conn.update_account(
self.admin_context,
account.id,
values={'name': 'customer_a'})
self.assertEquals(account.name, 'customer_a')
def test_add_system_account(self):
account = self.add_system_account_fixture()
self.assertEquals(account.name, self.system_account_fixtures[0]['name'])
def test_delete_system_account(self):
account = self.add_system_account_fixture()
self.storage_conn.delete_system_account(self.admin_context, account.id)
with self.assertRaises(exceptions.NotFound):
self.storage_conn.get_system_account(self.admin_context, account.id)
def test_update_system_account(self):
account = self.add_system_account_fixture()
self.storage_conn.update_system_account(
self.admin_context,
account.id,
values={'name': 'system_b'})
self.assertEquals(account.name, 'system_b')