87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
import mock
|
|
from artifice import interface, models
|
|
from artifice.models import billing
|
|
from .data_samples import RESOURCES, MAPPINGS
|
|
from .constants import config, TENANTS, AUTH_TOKEN
|
|
from datetime import timedelta
|
|
import json
|
|
|
|
|
|
@mock.patch("artifice.auth.Keystone")
|
|
@mock.patch("sqlalchemy.create_engine")
|
|
def get_usage(sqlmock, Keystone):
|
|
# At this point, we prime the ceilometer/requests response
|
|
# system, so that what we return to usage is what we expect
|
|
# to get in the usage system.
|
|
Keystone.auth_token = AUTH_TOKEN
|
|
|
|
def get_meter(self, start, end, auth):
|
|
# Returns meter data from our data up above
|
|
data = MAPPINGS[self.link]
|
|
return data
|
|
|
|
interface.Meter.get_meter = get_meter
|
|
artifice = interface.Artifice(config)
|
|
artifice.auth.tenants.list.return_value = TENANTS
|
|
|
|
Keystone.assert_called_with(
|
|
username=config["openstack"]["username"],
|
|
password=config["openstack"]["password"],
|
|
tenant_name=config["openstack"]["default_tenant"],
|
|
auth_url=config["openstack"]["authentication_url"]
|
|
)
|
|
tenants = None
|
|
tenants = artifice.tenants
|
|
|
|
t = tenants[0] # First tenant
|
|
t.resources = mock.create_autospec(interface.Resource, spec_set=True)
|
|
t.resources.return_value = (RESOURCES["networks"] + RESOURCES["vms"] +
|
|
RESOURCES["objects"] + RESOURCES["volumes"] +
|
|
RESOURCES["ips"])
|
|
|
|
# because of mocking, start/end dates are not required here:
|
|
usage = t.usage(start=None, end=None)
|
|
|
|
# This is a fully qualified Usage object.
|
|
return usage
|
|
|
|
|
|
def fill_db(session, numb_tenants, numb_resources, now):
|
|
for i in range(numb_tenants):
|
|
session.add(models.Tenant(
|
|
id="tenant_id_" + str(i),
|
|
info="metadata",
|
|
name="tenant_name_" + str(i),
|
|
created=now
|
|
))
|
|
for ii in range(numb_resources):
|
|
session.add(models.Resource(
|
|
id="resource_id_" + str(ii),
|
|
info=json.dumps({"type": "Resource" + str(ii)}),
|
|
tenant_id="tenant_id_" + str(i),
|
|
created=now
|
|
))
|
|
session.add(models.UsageEntry(
|
|
service="service" + str(ii),
|
|
volume=5,
|
|
resource_id="resource_id_" + str(ii),
|
|
tenant_id="tenant_id_" + str(i),
|
|
start=(now - timedelta(days=30)),
|
|
end=now,
|
|
created=now
|
|
))
|
|
session.commit()
|
|
|
|
|
|
def build_billable(numb_resources, volume):
|
|
tenant = billing.Tenant(name="demo", tenant_id="1")
|
|
|
|
for i in range(numb_resources):
|
|
metadata = {"type": "type_" + str(i)}
|
|
resource = billing.Resource(metadata, "resource_id_" + str(i))
|
|
service = billing.Service("service" + str(i), volume)
|
|
resource.services[service.name] = service
|
|
tenant.resources[resource.id] = resource
|
|
|
|
return tenant
|