diff --git a/compass/api/api.py b/compass/api/api.py index 33fbb340..f24f886e 100644 --- a/compass/api/api.py +++ b/compass/api/api.py @@ -189,16 +189,19 @@ def _wrap_response(func, response_code): return wrapped_func +def _reformat_host_networks(networks): + network_mapping = {} + for network in networks: + if 'interface' in network: + network_mapping[network['interface']] = network + return network_mapping + + def _reformat_host(host): if isinstance(host, list): return [_reformat_host(item) for item in host] if 'networks' in host: - networks = host['networks'] - network_mapping = {} - for network in networks: - if 'interface' in network: - network_mapping[network['interface']] = network - host['networks'] = network_mapping + host['networks'] = _reformat_host_networks(host['networks']) return host @@ -355,21 +358,29 @@ def take_user_action(user_id): ), 200 ) + + def disable_user(disable_user=None): + return user_api.update_user( + current_user, user_id, active=False + ) + disable_user_func = _wrap_response( - functools.partial( - user_api.update_user, current_user, user_id, active=False - ), + disable_user, 200 ) + + def enable_user(enable_user=None): + return user_api.update_user( + current_user, user_id, active=True + ) + enable_user_func = _wrap_response( - functools.partial( - user_api.update_user, current_user, user_id, active=True - ), + enable_user, 200 ) return _group_data_action( data, - add_permission=update_permissions_func, + add_permissions=update_permissions_func, remove_permissions=update_permissions_func, set_permissions=update_permissions_func, enable_user=enable_user_func, @@ -399,7 +410,7 @@ def show_user_permission(user_id, permission_id): @log_user_action @login_required def add_user_permission(user_id): - """Delete a specific user permission.""" + """Add permission to a specific user.""" data = _get_request_data() return utils.make_json_response( 200, @@ -518,7 +529,6 @@ def list_user_actions(user_id): def delete_all_user_actions(): """Delete all user actions.""" data = _get_request_data() - _filter_timestamp(data) return utils.make_json_response( 200, user_log_api.del_actions( @@ -533,7 +543,6 @@ def delete_all_user_actions(): def delete_user_actions(user_id): """Delete user actions.""" data = _get_request_data() - _filter_timestamp(data) return utils.make_json_response( 200, user_log_api.del_user_actions( @@ -933,17 +942,20 @@ def take_machine_action(machine_id): poweron_func = _wrap_response( functools.partial( machine_api.poweron_machine, current_user, machine_id - ) + ), + 202 ) poweroff_func = _wrap_response( functools.partial( machine_api.poweroff_machine, current_user, machine_id - ) + ), + 202 ) reset_func = _wrap_response( functools.partial( machine_api.reset_machine, current_user, machine_id - ) + ), + 202 ) return _group_data_action( data, @@ -1228,20 +1240,6 @@ def show_adapter(adapter_id): ) -@app.route("/adapters//roles", methods=['GET']) -@log_user_action -@login_required -def show_adapter_roles(adapter_id): - """Get adapter roles.""" - data = _get_request_args() - return utils.make_json_response( - 200, - adapter_api.get_adapter_roles( - current_user, adapter_id, **data - ) - ) - - @app.route("/adapters//metadata", methods=['GET']) @log_user_action @login_required @@ -2000,7 +1998,12 @@ def list_host_networks(host_id): """list host networks.""" data = _get_request_args() return utils.make_json_response( - 200, host_api.list_host_networks(current_user, host_id, **data) + 200, + _reformat_host_networks( + host_api.list_host_networks( + current_user, host_id, **data + ) + ) ) @@ -2014,7 +2017,10 @@ def list_hostnetworks(): is_promiscuous=_bool_converter ) return utils.make_json_response( - 200, host_api.list_hostnetworks(current_user, **data) + 200, + _reformat_host_networks( + host_api.list_hostnetworks(current_user, **data) + ) ) @@ -2311,6 +2317,31 @@ def proxy_put(url): ) +@app.route("/proxy/", methods=['PATCH']) +@log_user_action +@login_required +def proxy_patch(url): + """proxy url.""" + headers = _get_headers( + 'Content-Type', 'Accept-Encoding', + 'Content-Encoding', 'Accept', 'User-Agent', + 'Content-MD5', 'Transfer-Encoding', + 'Cookie' + ) + response = requests.patch( + '%s/%s' % (setting.PROXY_URL_PREFIX, url), + data=request.data, + headers=headers + ) + logging.debug( + 'proxy %s response: %s', + url, response.text + ) + return utils.make_json_response( + response.status_code, _get_response_json(response) + ) + + @app.route("/proxy/", methods=['DELETE']) @log_user_action @login_required diff --git a/compass/db/api/adapter_holder.py b/compass/db/api/adapter_holder.py index 3cad3a79..185eeb74 100644 --- a/compass/db/api/adapter_holder.py +++ b/compass/db/api/adapter_holder.py @@ -128,15 +128,3 @@ def get_adapter_internal(session, adapter_id): def get_adapter(session, getter, adapter_id, **kwargs): """get adapter.""" return get_adapter_internal(session, adapter_id) - - -@utils.supported_filters([]) -@database.run_in_session() -@user_api.check_user_permission_in_session( - permission.PERMISSION_LIST_ADAPTERS -) -@utils.wrap_to_dict(RESP_ROLES_FIELDS) -def get_adapter_roles(session, getter, adapter_id, **kwargs): - """get adapter roles.""" - adapter = get_adapter_internal(session, adapter_id) - return adapter.get('roles', []) diff --git a/compass/db/api/cluster.py b/compass/db/api/cluster.py index 2e0c54bb..75cb1a20 100644 --- a/compass/db/api/cluster.py +++ b/compass/db/api/cluster.py @@ -29,14 +29,15 @@ from compass.utils import util SUPPORTED_FIELDS = [ - 'name', 'os_name', 'distributed_system_name', 'owner', 'adapter_id' + 'name', 'os_name', 'distributed_system_name', 'owner', + 'adapter_name', 'flavor_name' ] SUPPORTED_CLUSTERHOST_FIELDS = [] RESP_FIELDS = [ 'id', 'name', 'os_name', 'os_id', 'distributed_system_id', 'reinstall_distributed_system', 'flavor', 'distributed_system_name', 'distributed_system_installed', - 'owner', 'adapter_id', + 'owner', 'adapter_id', 'adapter_name', 'flavor_name', 'created_at', 'updated_at' ] RESP_CLUSTERHOST_FIELDS = [ @@ -691,27 +692,25 @@ def _update_clusterhost(session, updater, clusterhost, **kwargs): cluster_roles = [] cluster = clusterhost.cluster flavor = cluster.flavor - if not flavor: - raise exception.InvalidParameter( - 'not flavor in cluster %s' % cluster.name - ) - for flavor_roles in flavor.flavor_roles: - cluster_roles.append(flavor_roles.role.name) - for role in roles: - if role not in cluster_roles: - raise exception.InvalidParameter( - 'role %s is not in cluster roles %s' % ( - role, cluster_roles - ) - ) - if 'roles' in kwargs: - roles = kwargs['roles'] - flavor = clusterhost.cluster.flavor if not roles: - if flavor and flavor.flavor_roles: + if flavor: raise exception.InvalidParameter( 'roles %s is empty' % roles ) + else: + if not flavor: + raise exception.InvalidParameter( + 'not flavor in cluster %s' % cluster.name + ) + for flavor_roles in flavor.flavor_roles: + cluster_roles.append(flavor_roles.role.name) + for role in roles: + if role not in cluster_roles: + raise exception.InvalidParameter( + 'role %s is not in cluster roles %s' % ( + role, cluster_roles + ) + ) @utils.input_validates( roles=roles_validates, diff --git a/compass/db/api/switch.py b/compass/db/api/switch.py index 9efe3fe7..7f6a9dbd 100644 --- a/compass/db/api/switch.py +++ b/compass/db/api/switch.py @@ -58,10 +58,6 @@ ADDED_MACHINES_FIELDS = ['mac', 'port'] OPTIONAL_ADDED_MACHINES_FIELDS = [ 'vlans', 'ipmi_credentials', 'tag', 'location' ] -OPTIONAL_CHECK_FILTER_FIELDS = [ - 'filter_type', 'ports', 'port_prefix', 'port_suffix', - 'port_start', 'port_end' -] ADDED_SWITCH_MACHINES_FIELDS = ['port', 'vlans'] UPDATED_MACHINES_FIELDS = [ 'port', 'vlans', 'ipmi_credentials', @@ -104,18 +100,7 @@ RESP_CLUSTER_FIELDS = [ def _check_filters(switch_filters): logging.debug('check filters: %s', switch_filters) - switch_filters = models.Switch.parse_filters(switch_filters) - for switch_filter in switch_filters: - _check_filter_internal(**switch_filter) - - -@utils.supported_filters( - optional_support_keys=OPTIONAL_CHECK_FILTER_FIELDS -) -def _check_filter_internal( - **switch_filter -): - pass + models.Switch.parse_filters(switch_filters) def _check_vlans(vlans): @@ -791,7 +776,7 @@ def _update_machine_internal(session, switch_id, machine_id, **kwargs): def _add_machines(session, switch, machines): - for machine in machines.items(): + for machine in machines: _update_machine_internal( session, switch.id, **machine ) @@ -809,7 +794,7 @@ def _set_machines(session, switch, machines): session, models.SwitchMachine, switch_id=switch.id ) - for switch_machine in machines.items(): + for switch_machine in machines: _update_machine_internal( session, switch.id, **switch_machine ) diff --git a/compass/db/api/user.py b/compass/db/api/user.py index 30156f12..96ae96da 100644 --- a/compass/db/api/user.py +++ b/compass/db/api/user.py @@ -367,7 +367,7 @@ def update_user(session, updater, user_id, **kwargs): allowed_fields |= set(ADMIN_UPDATED_FIELDS) if updater.id == user_id: allowed_fields |= set(SELF_UPDATED_FIELDS) - unsupported_fields = allowed_fields - set(kwargs) + unsupported_fields = set(kwargs) - allowed_fields if unsupported_fields: # The user is not allowed to update a user. raise exception.Forbidden( diff --git a/compass/db/api/user_log.py b/compass/db/api/user_log.py index 531dcad0..c5fcae23 100644 --- a/compass/db/api/user_log.py +++ b/compass/db/api/user_log.py @@ -35,40 +35,15 @@ def log_user_action(session, user_id, action): ) -def _compress_response(actions, user_id): - user_actions = [] - for action in actions: - action_dict = action.to_dict() - del action_dict['user_id'] - user_actions.append(action_dict) - return {'user_id': user_id, 'logs': user_actions} - - -def _compress_response_by_user(actions): - actions_by_user = {} - for action in actions: - action_dict = action.to_dict() - user_id = action_dict['user_id'] - del action_dict['user_id'] - actions_by_user.setdefault(user_id, []).append(action_dict) - - return [ - {'user_id': user_id, 'logs': user_actions} - for user_id, user_actions in actions_by_user.items() - ] - - @utils.supported_filters(optional_support_keys=USER_SUPPORTED_FIELDS) @user_api.check_user_admin_or_owner() @database.run_in_session() @utils.wrap_to_dict(RESP_FIELDS) def list_user_actions(session, lister, user_id, **filters): """list user actions.""" - return _compress_response( - utils.list_db_objects( - session, models.UserLog, user_id=user_id, **filters - ), - user_id + return utils.list_db_objects( + session, models.UserLog, order_by=['timestamp'], + user_id=user_id, **filters ) @@ -78,35 +53,28 @@ def list_user_actions(session, lister, user_id, **filters): @utils.wrap_to_dict(RESP_FIELDS) def list_actions(session, lister, **filters): """list actions.""" - return _compress_response_by_user( - utils.list_db_objects( - session, models.UserLog, **filters - ) + return utils.list_db_objects( + session, models.UserLog, order_by=['timestamp'], **filters ) -@utils.supported_filters(optional_support_keys=USER_SUPPORTED_FIELDS) +@utils.supported_filters() @user_api.check_user_admin_or_owner() @database.run_in_session() @utils.wrap_to_dict(RESP_FIELDS) def del_user_actions(session, deleter, user_id, **filters): """delete user actions.""" - return _compress_response( - utils.del_db_objects( - session, models.UserLog, user_id=user_id, **filters - ), - user_id + return utils.del_db_objects( + session, models.UserLog, user_id=user_id, **filters ) -@utils.supported_filters(optional_support_keys=SUPPORTED_FIELDS) +@utils.supported_filters() @user_api.check_user_admin() @database.run_in_session() @utils.wrap_to_dict(RESP_FIELDS) def del_actions(session, deleter, **filters): """delete actions.""" - return _compress_response_by_user( - utils.del_db_objects( - session, models.UserLog, **filters - ) + return utils.del_db_objects( + session, models.UserLog, **filters ) diff --git a/compass/db/api/utils.py b/compass/db/api/utils.py index 04352253..d20f09df 100644 --- a/compass/db/api/utils.py +++ b/compass/db/api/utils.py @@ -77,12 +77,38 @@ def _between_condition(col_attr, value): return None +def model_order_by(query, model, order_by): + if not order_by: + return query + order_by_cols = [] + for key in order_by: + if isinstance(key, tuple): + key, is_desc = key + else: + is_desc = False + if isinstance(key, basestring): + if hasattr(model, key): + col_attr = getattr(model, key) + else: + continue + else: + col_attr = key + if is_desc: + order_by_cols.append(col_attr.desc()) + else: + order_by_cols.append(col_attr) + return query.order_by(*order_by_cols) + + def model_filter(query, model, **filters): for key, value in filters.items(): - if hasattr(model, key): - col_attr = getattr(model, key) + if isinstance(key, basestring): + if hasattr(model, key): + col_attr = getattr(model, key) + else: + continue else: - continue + col_attr = key if isinstance(value, list): query = query.filter(col_attr.in_(value)) elif isinstance(value, dict): @@ -505,15 +531,21 @@ def add_db_object(session, table, exception_when_existing=True, return db_object -def list_db_objects(session, table, **filters): +def list_db_objects(session, table, order_by=[], **filters): """List db objects.""" with session.begin(subtransactions=True): logging.debug( 'session %s list db objects by filters %s in table %s', session, filters, table.__name__ ) - db_objects = model_filter( - model_query(session, table), table, **filters + db_objects = model_order_by( + model_filter( + model_query(session, table), + table, + **filters + ), + table, + order_by ).all() logging.debug( 'session %s got listed db objects: %s', diff --git a/compass/db/models.py b/compass/db/models.py index c3a20ada..da1c4155 100644 --- a/compass/db/models.py +++ b/compass/db/models.py @@ -121,7 +121,7 @@ class HelperMixin(object): class MetadataMixin(HelperMixin): - name = Column(String(80)) + name = Column(String(80), nullable=False) display_name = Column(String(80)) path = Column(String(256)) description = Column(Text) @@ -309,7 +309,7 @@ class MetadataMixin(HelperMixin): class FieldMixin(HelperMixin): id = Column(Integer, primary_key=True) - field = Column(String(80), unique=True) + field = Column(String(80), unique=True, nullable=False) field_type_data = Column( 'field_type', Enum( @@ -395,8 +395,8 @@ class FieldMixin(HelperMixin): class InstallerMixin(HelperMixin): - name = Column(String(80)) - alias = Column(String(80), unique=True) + name = Column(String(80), nullable=False) + alias = Column(String(80), unique=True, nullable=False) settings = Column(JSONEncoded, default={}) def validate(self): @@ -468,12 +468,12 @@ class HostNetwork(BASE, TimestampMixin, HelperMixin): ForeignKey('host.id', onupdate='CASCADE', ondelete='CASCADE') ) interface = Column( - String(80)) + String(80), nullable=False) subnet_id = Column( Integer, ForeignKey('subnet.id', onupdate='CASCADE', ondelete='CASCADE') ) - ip_int = Column(BigInteger, unique=True) + ip_int = Column(BigInteger, unique=True, nullable=False) is_mgmt = Column(Boolean, default=False) is_promiscuous = Column(Boolean, default=False) @@ -543,7 +543,7 @@ class ClusterHostLogHistory(BASE, LogHistoryMixin): ForeignKey('clusterhost.id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True ) - filename = Column(String(80), primary_key=True) + filename = Column(String(80), primary_key=True, nullable=False) cluster_id = Column( Integer, ForeignKey('cluster.id') @@ -573,7 +573,7 @@ class HostLogHistory(BASE, LogHistoryMixin): Integer, ForeignKey('host.id', onupdate='CASCADE', ondelete='CASCADE'), primary_key=True) - filename = Column(String(80), primary_key=True) + filename = Column(String(80), primary_key=True, nullable=False) def __init__(self, id, filename, **kwargs): self.id = id @@ -754,7 +754,7 @@ class ClusterHost(BASE, TimestampMixin, HelperMixin): @hostname.expression def hostname(cls): - return cls.host.name + return Host.hostname @property def distributed_system_installed(self): @@ -897,7 +897,7 @@ class Host(BASE, TimestampMixin, HelperMixin): """Host table.""" __tablename__ = 'host' - name = Column(String(80), unique=True) + name = Column(String(80), unique=True, nullable=True) os_id = Column(Integer, ForeignKey('os.id')) config_step = Column(String(80), default='') os_config = Column(JSONEncoded, default={}) @@ -954,10 +954,7 @@ class Host(BASE, TimestampMixin, HelperMixin): @hybrid_property def hostname(self): - if self.name == str(self.id): - return None - else: - return self.name + return self.name @hostname.expression def hostname(cls): @@ -988,13 +985,9 @@ class Host(BASE, TimestampMixin, HelperMixin): def __init__(self, id, **kwargs): self.id = id - self.name = str(self.id) self.state = HostState() super(Host, self).__init__(**kwargs) - def initialize(self): - super(Host, self).initialize() - def update(self): creator = self.creator if creator: @@ -1160,7 +1153,7 @@ class Cluster(BASE, TimestampMixin, HelperMixin): __tablename__ = 'cluster' id = Column(Integer, primary_key=True) - name = Column(String(80), unique=True) + name = Column(String(80), unique=True, nullable=False) reinstall_distributed_system = Column(Boolean, default=True) config_step = Column(String(80), default='') os_id = Column(Integer, ForeignKey('os.id')) @@ -1184,7 +1177,7 @@ class Cluster(BASE, TimestampMixin, HelperMixin): deployed_package_config = Column(JSONEncoded, default={}) config_validated = Column(Boolean, default=False) adapter_id = Column(Integer, ForeignKey('adapter.id')) - adapter_name = Column(String(80), nullable=True) + adapter_name = Column(String(80)) creator_id = Column(Integer, ForeignKey('user.id')) owner = Column(String(80)) clusterhosts = relationship( @@ -1240,12 +1233,6 @@ class Cluster(BASE, TimestampMixin, HelperMixin): self.flavor_name = flavor.name else: self.flavor_name = None - else: - self.adapter_name = None - self.distributed_system = None - self.distributed_system_name = None - self.flavor = None - self.flavor_name = None super(Cluster, self).update() def validate(self): @@ -1403,7 +1390,7 @@ class Permission(BASE, HelperMixin, TimestampMixin): __tablename__ = 'permission' id = Column(Integer, primary_key=True) - name = Column(String(80), unique=True) + name = Column(String(80), unique=True, nullable=False) alias = Column(String(100)) description = Column(Text) user_permissions = relationship( @@ -1427,7 +1414,7 @@ class UserToken(BASE, HelperMixin): Integer, ForeignKey('user.id', onupdate='CASCADE', ondelete='CASCADE') ) - token = Column(String(256), unique=True) + token = Column(String(256), unique=True, nullable=False) expire_timestamp = Column( DateTime, default=lambda: datetime.datetime.now() ) @@ -1473,7 +1460,7 @@ class User(BASE, HelperMixin, TimestampMixin): __tablename__ = 'user' id = Column(Integer, primary_key=True) - email = Column(String(80), unique=True) + email = Column(String(80), unique=True, nullable=False) crypted_password = Column('password', String(225)) firstname = Column(String(80)) lastname = Column(String(80)) @@ -1699,7 +1686,7 @@ class Machine(BASE, HelperMixin, TimestampMixin): """Machine table.""" __tablename__ = 'machine' id = Column(Integer, primary_key=True) - mac = Column(String(24), unique=True) + mac = Column(String(24), unique=True, nullable=False) ipmi_credentials = Column(JSONEncoded, default={}) tag = Column(JSONEncoded, default={}) location = Column(JSONEncoded, default={}) @@ -1787,7 +1774,7 @@ class Switch(BASE, HelperMixin, TimestampMixin): """Switch table.""" __tablename__ = 'switch' id = Column(Integer, primary_key=True) - ip_int = Column('ip', BigInteger, unique=True) + ip_int = Column('ip', BigInteger, unique=True, nullable=False) credentials = Column(JSONEncoded, default={}) vendor = Column(String(256), nullable=True) state = Column(Enum('initialized', 'unreachable', 'notsupported', @@ -2075,7 +2062,7 @@ class OperatingSystem(BASE, HelperMixin): ForeignKey('os.id', onupdate='CASCADE', ondelete='CASCADE'), nullable=True ) - name = Column(String(80), unique=True) + name = Column(String(80), unique=True, nullable=False) deployable = Column(Boolean, default=False) metadatas = relationship( @@ -2190,7 +2177,7 @@ class AdapterFlavor(BASE, HelperMixin): Integer, ForeignKey('adapter.id', onupdate='CASCADE', ondelete='CASCADE') ) - name = Column(String(80)) + name = Column(String(80), nullable=False) display_name = Column(String(80)) template = Column(String(80)) _ordered_flavor_roles = Column( @@ -2269,7 +2256,7 @@ class AdapterRole(BASE, HelperMixin): __tablename__ = "adapter_role" id = Column(Integer, primary_key=True) - name = Column(String(80)) + name = Column(String(80), nullable=False) display_name = Column(String(80)) description = Column(Text) optional = Column(Boolean, default=False) @@ -2377,7 +2364,7 @@ class Adapter(BASE, HelperMixin): __tablename__ = 'adapter' id = Column(Integer, primary_key=True) - name = Column(String(80), unique=True) + name = Column(String(80), unique=True, nullable=False) display_name = Column(String(80)) parent_id = Column( Integer, @@ -2548,9 +2535,6 @@ class Adapter(BASE, HelperMixin): def to_dict(self): dict_info = super(Adapter, self).to_dict() dict_info.update({ - 'roles': [ - role.to_dict() for role in self.adapter_roles - ], 'supported_oses': [ adapter_os.to_dict() for adapter_os in self.adapter_supported_oses @@ -2585,7 +2569,7 @@ class DistributedSystem(BASE, HelperMixin): ), nullable=True ) - name = Column(String(80), unique=True) + name = Column(String(80), unique=True, nullable=False) deployable = Column(Boolean, default=False) adapters = relationship( @@ -2650,8 +2634,8 @@ class Subnet(BASE, TimestampMixin, HelperMixin): __tablename__ = 'subnet' id = Column(Integer, primary_key=True) - name = Column(String(80), unique=True) - subnet = Column(String(80), unique=True) + name = Column(String(80), unique=True, nullable=True) + subnet = Column(String(80), unique=True, nullable=False) host_networks = relationship( HostNetwork, @@ -2664,7 +2648,8 @@ class Subnet(BASE, TimestampMixin, HelperMixin): self.subnet = subnet super(Subnet, self).__init__(**kwargs) - def initialize(self): + def to_dict(self): + dict_info = super(Subnet, self).to_dict() if not self.name: - self.name = self.subnet - super(Subnet, self).initialize() + dict_info['name'] = self.subnet + return dict_info diff --git a/compass/tests/api/test_api.py b/compass/tests/api/test_api.py index 999a83f8..706741a6 100644 --- a/compass/tests/api/test_api.py +++ b/compass/tests/api/test_api.py @@ -720,17 +720,6 @@ class TestAdapterAPI(ApiTestCase): return_value = self.get(url) self.assertEqual(return_value.status_code, 404) - def test_show_adapter_roles(self): - # get adapter role successfully - url = '/adapters/%s/roles' % self.adapter_id - return_value = self.get(url) - self.assertEqual(return_value.status_code, 200) - - # give a non-existed id - url = '/adapters/99/roles' - return_value = self.get(url) - self.assertEqual(return_value.status_code, 404) - class TestHostAPI(ApiTestCase): """Test host api.""" @@ -784,13 +773,15 @@ class TestHostAPI(ApiTestCase): url = '/hosts/1/networks' datas = [ { - 'ip': '179049563', + 'interface': 'eth0', + 'ip': '10.172.20.91', 'subnet_id': 1, 'is_mgmt': False, 'is_promiscuous': False }, { - 'ip': '179049582', + 'interface': 'eth1', + 'ip': '10.172.20.110', 'subnet_id': 1, 'is_mgmt': False, 'is_promiscuous': False @@ -883,7 +874,7 @@ class TestHostAPI(ApiTestCase): return_value = self.get(url) resp = json.loads(return_value.get_data()) count = len(resp) - self.assertEqual(count, 1) + self.assertEqual(count, 2) self.assertEqual(return_value.status_code, 200) def test_show_host_network(self): diff --git a/compass/tests/db/api/test_adapter_holder.py b/compass/tests/db/api/test_adapter_holder.py index 9689d45f..1be6273a 100644 --- a/compass/tests/db/api/test_adapter_holder.py +++ b/compass/tests/db/api/test_adapter_holder.py @@ -143,49 +143,6 @@ class TestGetAdapter(AdapterTestCase): ) -class TestGetAdapterRoles(AdapterTestCase): - """Test get adapter roles.""" - - def setUp(self): - super(TestGetAdapterRoles, self).setUp() - - def tearDown(self): - super(TestGetAdapterRoles, self).tearDown() - - def test_get_adapter_roles(self): - adapter_roles = adapter.get_adapter_roles( - self.user_object, - self.adapter_id - ) - result = [] - for adapter_role in adapter_roles: - for k, v in adapter_role.items(): - if k == 'display_name': - result.append(v) - expected = [ - 'compute node', - 'network node', - 'storage node', - 'image node', - 'vnc proxy node', - 'controller node', - 'message queue node', - 'database node', - 'ha proxy node', - 'all in one compute' - ] - self.assertIsNotNone(adapter_roles) - self.assertListEqual(result, expected) - - def test_adapter_non_exist(self): - self.assertRaises( - exception.RecordNotExists, - adapter.get_adapter_roles, - self.user_object, - 99 - ) - - if __name__ == '__main__': flags.init() logsetting.init() diff --git a/compass/tests/db/api/test_user.py b/compass/tests/db/api/test_user.py index 2ec35f27..fd336663 100644 --- a/compass/tests/db/api/test_user.py +++ b/compass/tests/db/api/test_user.py @@ -223,11 +223,14 @@ class TestUpdateUser(BaseTest): password='dummy', is_admin=False ) + user_object = user_api.get_user_object('dummy@abc.com') + print 'user object: %s' % user_object self.assertRaises( exception.Forbidden, user_api.update_user, - self.user_object, - 2 + user_object, + 2, + is_admin=False ) diff --git a/compass/tests/db/api/test_user_log.py b/compass/tests/db/api/test_user_log.py index 62a48099..12535fa9 100644 --- a/compass/tests/db/api/test_user_log.py +++ b/compass/tests/db/api/test_user_log.py @@ -54,7 +54,7 @@ class TestListUserActions(BaseTest): ) self.assertEqual( 1, - user_action['user_id'] + user_action[0]['user_id'] ) def test_list_none_user_actions(self): @@ -66,7 +66,7 @@ class TestListUserActions(BaseTest): self.user_object, 2 ) - self.assertEqual([], user_action['logs']) + self.assertEqual([], user_action) class TestListActions(BaseTest): @@ -109,7 +109,7 @@ class TestDelUserActions(BaseTest): self.user_object, self.user_object.id ) - self.assertEqual([], del_user_action['logs']) + self.assertEqual([], del_user_action) class TestDelActions(BaseTest):