def test_init_with_invalid_name(self): name = object() try: utils.create_object(name) self.fail("Should not fail.") except Exception as err: self.assertIsInstance(err, SyntaxError)
def test_init_object_type_rc(self): ot = "ReplicationController" name = "yomama" obj = utils.create_object(name=name, obj_type=ot) self.assertIsInstance(obj, K8sObject) self.assertEqual(ot, obj.obj_type) self.assertEqual(name, obj.name)
def test_init_object_type_service(self): ot = "Service" name = "yomama" obj = utils.create_object(name=name, obj_type=ot) self.assertIsInstance(obj, K8sObject) self.assertEqual(ot, obj.obj_type) self.assertEqual(name, obj.name)
def test_object_as_json(self): ot = "Service" name = "yomama" obj = utils.create_object(name=name, obj_type=ot) s = obj.as_json() self.assertIsInstance(s, str) valid = json.loads(s) self.assertIsInstance(valid, dict)
def test_object_get_with_params_none_arg(self): ot = "Pod" name = "yomama" obj = utils.create_object(name=name, obj_type=ot) try: obj.get_with_params() except Exception as err: self.assertIsInstance(err, SyntaxError)
def test_object_service_create_unprocessable(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Service" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(config=config, name=name, obj_type=ot) with self.assertRaises(UnprocessableEntityException): obj.create()
def test_object_service_get_model_doesnt_exist(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Service" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(config=config, name=name, obj_type=ot) with self.assertRaises(NotFoundException): obj.get_model()
def test_object_secret_delete_not_found(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) ot = "Secret" name = "yomama-{}".format(str(uuid.uuid4())) if config.api_host is not None and utils.is_reachable(config.api_host): obj = utils.create_object(config=config, name=name, obj_type=ot) with self.assertRaises(NotFoundException): obj.delete()
def test_object_secret_update(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) ot = "Secret" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(config=config, name=name, obj_type=ot) if config.api_host is not None and utils.is_reachable(config.api_host): obj.create() obj.update()
def test_object_get_with_params_none_arg(self): ot = "Pod" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(name=name, obj_type=ot) try: obj.get_with_params() except Exception as err: self.assertIsInstance(err, SyntaxError)
def test_object_set_name(self): ot = "Pod" name1 = "yomama" obj = utils.create_object(name=name1, obj_type=ot) self.assertEqual(name1, obj.name) name2 = "sofat" obj.set_name(name2) self.assertNotEqual(obj.name, name1) self.assertEqual(obj.name, name2)
def _create_details_objects(self, version, create_uv=True, create_material=True): bmesh = utils.create_bmesh(( (0, 0, 0), (-1, -1, 0), (+1, -1, 0), (+1, +1, 0), (-1, +1, 0), ), ((0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 1)), create_uv) root_object = bpy.data.objects.new('Details', None) bpy.ops.object.select_all(action='DESELECT') utils.link_object(root_object) if bpy.app.version >= (2, 80, 0): root_object.select_set(True) else: root_object.select = True root_object.xray.is_details = True data = root_object.xray.detail self._create_details_images(data, version) self._create_details_slots_objects(data) meshes_object = bpy.data.objects.new('DM Meshes', None) utils.link_object(meshes_object) meshes_object.parent = root_object data.slots.meshes_object = meshes_object.name objs = [] for i in range(3): obj = utils.create_object(bmesh, create_material) obj.name = 'tdm%d' % (i + 1) obj.parent = meshes_object obj.xray.is_details = True obj.xray.detail.model.index = i objs.append(obj) bpy_texture = bpy.data.textures.new('test_texture', 'IMAGE') bpy_image = bpy.data.images.new('test_image.dds', 0, 0) bpy_image.source = 'FILE' bpy_image.filepath = 'test_image.dds' if bpy.app.version >= (2, 80, 0): obj.data.materials[0].use_nodes = True node_tree = obj.data.materials[0].node_tree texture_node = node_tree.nodes.new('ShaderNodeTexImage') texture_node.image = bpy_image texture_node.location.x -= 500 princ_shader = node_tree.nodes['Principled BSDF'] node_tree.links.new(texture_node.outputs['Color'], princ_shader.inputs['Base Color']) else: bpy_texture.image = bpy_image texture_slot = obj.data.materials[0].texture_slots.add() texture_slot.texture = bpy_texture return objs
def test_object_rc_list_from_scratch(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "ReplicationController" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) r = obj.list() self.assertIsNotNone(r) self.assertEqual(0, len(r))
def test_object_set_name(self): ot = "Pod" name1 = "yomama" obj = utils.create_object(name=name1, obj_type=ot) self.assertEqual(name1, obj.name) name2 = "sofat" obj.name = name2 self.assertNotEqual(obj.name, name1) self.assertEqual(obj.name, name2)
def test_object_delete_name_unset(self): ot = "Pod" name = "yomama" obj = utils.create_object(name=name, obj_type=ot) obj.name = None try: obj.delete() except Exception as err: self.assertIsInstance(err, SyntaxError)
def test_object_rc_list_from_scratch(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "ReplicationController" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(config=config, name=name, obj_type=ot) r = obj.list() self.assertIsNotNone(r) self.assertEqual(0, len(r))
def test_object_get_with_params_nonexistent(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Pod" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(config=config, name=name, obj_type=ot) data = {'yokey': 'yovalue'} r = obj.get_with_params(data) self.assertIsNotNone(r) self.assertEqual(0, len(r))
def test_object_secret_update_bad_request(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Secret" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) try: obj.update() except Exception as err: self.assertIsInstance(err, BadRequestException)
def test_object_get_with_params_nonexistent(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Pod" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) data = {'yokey': 'yovalue'} r = obj.get_with_params(data) self.assertIsNotNone(r) self.assertEqual(0, len(r))
def test_object_secret_get_model_doesnt_exist(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Secret" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) try: obj.get_model() except Exception as err: self.assertIsInstance(err, NotFoundException)
def test_object_service_delete_not_found(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Service" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) try: obj.delete() except Exception as err: self.assertIsInstance(err, NotFoundException)
def test_object_rc_create_unprocessable(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "ReplicationController" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) try: obj.create() except Exception as err: self.assertIsInstance(err, UnprocessableEntityException)
def test_object_version(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) ot = "Pod" name = "yomama-{}".format(str(uuid.uuid4())) if config.api_host is not None and utils.is_reachable(config.api_host): obj = utils.create_object(config=config, name=name, obj_type=ot) v = obj.server_version() self.assertIn('gitCommit', v) self.assertIn('gitVersion', v) self.assertIn('major', v) self.assertIn('minor', v)
def _create_objects(self): bmesh = utils.create_bmesh(( (0, 0, 0), (-1, -1, 0), (+1, -1, 0), (+1, +1, 0), (-1, +1, 0), ), ((0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 1))) objs = [] for i in range(3): obj = utils.create_object(bmesh) obj.name = 'tobj%d' % (i + 1) objs.append(obj) objs[1].xray.export_path = 'a/b' return objs
def test_import_sg_maya(self): # Arrange arm = bpy.data.armatures.new('test') obj = bpy.data.objects.new('test', arm) utils.link_object(obj) utils.set_active_object(obj) bpy.ops.object.mode_set(mode='EDIT') try: bone = arm.edit_bones.new('non-exp') bone.head.z = 0.5 bone = arm.edit_bones.new('exp') bone.head.z = 0.5 finally: bpy.ops.object.mode_set(mode='OBJECT') arm.bones['non-exp'].xray.exportable = False bmesh = utils.create_bmesh(( (0, 0, 0), (-1, -1, 0), (+1, -1, 0), (+1, +1, 0), (-1, +1, 0), ), ((0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 1)), True) obj_me = utils.create_object(bmesh, True) obj_me.parent = obj obj_me.xray.isroot = False group = obj_me.vertex_groups.new(name='exp') group.add(range(len(obj_me.data.vertices)), 1, 'REPLACE') # Act bpy.ops.xray_export.object( objects=obj.name, directory=self.outpath(), texture_name_from_image_path=False, export_motions=False, ) # Assert bpy.ops.xray_import.object( directory=self.outpath(), files=[{ 'name': 'test.object' }], ) obj_arm = bpy.data.objects[-1] self.assertEqual(obj_arm.type, 'ARMATURE') self.assertEqual(obj_arm.xray.isroot, True) imp_arm = bpy.data.armatures[1] self.assertEqual(len(imp_arm.bones), 1)
def test_object_secret_list_from_scratch(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Secret" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) r = obj.list() self.assertIsNotNone(r) self.assertEqual(1, len(r)) secret = r[0] self.assertIsInstance(secret, dict) self.assertEqual(3, len(secret)) for i in ['data', 'metadata', 'type']: self.assertIn(i, secret) self.assertIsInstance(secret['data'], dict) self.assertIsInstance(secret['metadata'], dict) self.assertIsInstance(secret['type'], str)
def test_object_service_list_from_scratch(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Service" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(config=config, name=name, obj_type=ot) r = obj.list() self.assertIsNotNone(r) self.assertEqual(1, len(r)) service = r[0] self.assertIsInstance(service, dict) self.assertEqual(3, len(service)) for i in ['metadata', 'spec', 'status']: self.assertIn(i, service) self.assertIsInstance(service[i], dict) for i in [ 'creationTimestamp', 'labels', 'name', 'namespace', 'resourceVersion', 'selfLink', 'uid' ]: self.assertIn(i, service['metadata']) for i in [ 'creationTimestamp', 'name', 'namespace', 'resourceVersion', 'selfLink', 'uid' ]: self.assertIsInstance(service['metadata'][i], str) self.assertIsInstance(service['metadata']['labels'], dict) self.assertEqual(2, len(service['metadata']['labels'])) for i in ['component', 'provider']: self.assertIn(i, service['metadata']['labels']) self.assertIsInstance(service['metadata']['labels'][i], str) for i in ['clusterIP', 'ports', 'sessionAffinity', 'type']: self.assertIn(i, service['spec']) for i in ['clusterIP', 'sessionAffinity', 'type']: self.assertIsInstance(service['spec'][i], str) self.assertIsInstance(service['spec']['ports'], list) self.assertEqual(1, len(service['spec']['ports'])) port = service['spec']['ports'][0] self.assertIsInstance(port, dict) self.assertEqual(4, len(port)) for i in ['name', 'port', 'protocol', 'targetPort']: self.assertIn(i, port) for i in ['name', 'protocol']: self.assertIsInstance(port[i], str) for i in ['port', 'targetPort']: self.assertIsInstance(port[i], int)
def _create_details_objects(self, version, create_uv=True, create_material=True): bmesh = utils.create_bmesh(( (0, 0, 0), (-1, -1, 0), (+1, -1, 0), (+1, +1, 0), (-1, +1, 0), ), ((0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 1)), create_uv) root_object = bpy.data.objects.new('Details', None) bpy.ops.object.select_all(action='DESELECT') root_object.select = True bpy.context.scene.objects.link(root_object) root_object.xray.is_details = True data = root_object.xray.detail self._create_details_images(data, version) self._create_details_slots_objects(data) meshes_object = bpy.data.objects.new('DM Meshes', None) bpy.context.scene.objects.link(meshes_object) meshes_object.parent = root_object data.slots.meshes_object = meshes_object.name objs = [] for i in range(3): obj = utils.create_object(bmesh, create_material) obj.name = 'tdm%d' % (i + 1) obj.parent = meshes_object obj.xray.is_details = True obj.xray.detail.model.index = i objs.append(obj) bpy_texture = bpy.data.textures.new('test_texture', 'IMAGE') bpy_image = bpy.data.images.new('test_image.dds', 0, 0) bpy_image.source = 'FILE' bpy_image.filepath = 'test_image.dds' texture_slot = obj.data.materials[0].texture_slots.add() texture_slot.texture = bpy_texture return objs
def test_object_secret_list_from_scratch(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Secret" name = "yomama-{}".format(str(uuid.uuid4())) obj = utils.create_object(config=config, name=name, obj_type=ot) r = obj.list() self.assertIsNotNone(r) if not len(r): obj.create() r = obj.list() if len(r): secret = r[0] self.assertIsInstance(secret, dict) self.assertEqual(3, len(secret)) for i in ['data', 'metadata', 'type']: self.assertIn(i, secret) self.assertIsInstance(secret['data'], dict) self.assertIsInstance(secret['metadata'], dict) self.assertIsInstance(secret['type'], str)
def _create_dm_objects(self, create_uv=True, create_material=True): bmesh = utils.create_bmesh(( (0, 0, 0), (-1, -1, 0), (+1, -1, 0), (+1, +1, 0), (-1, +1, 0), ), ((0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 1)), create_uv) objs = [] for i in range(3): obj = utils.create_object(bmesh, create_material) obj.name = 'tdm%d' % (i + 1) objs.append(obj) bpy_texture = bpy.data.textures.new('test_texture', 'IMAGE') bpy_image = bpy.data.images.new('test_image.dds', 0, 0) bpy_image.source = 'FILE' bpy_image.filepath = 'test_image.dds' texture_slot = obj.data.materials[0].texture_slots.add() texture_slot.texture = bpy_texture return objs
def test_object_service_list_from_scratch(self): config = K8sConfig(kubeconfig=utils.kubeconfig_fallback) if config.api_host is not None and utils.is_reachable(config.api_host): ot = "Service" name = "yomama" obj = utils.create_object(config=config, name=name, obj_type=ot) r = obj.list() self.assertIsNotNone(r) self.assertEqual(1, len(r)) service = r[0] self.assertIsInstance(service, dict) self.assertEqual(3, len(service)) for i in ['metadata', 'spec', 'status']: self.assertIn(i, service) self.assertIsInstance(service[i], dict) for i in ['creationTimestamp', 'labels', 'name', 'namespace', 'resourceVersion', 'selfLink', 'uid']: self.assertIn(i, service['metadata']) for i in ['creationTimestamp', 'name', 'namespace', 'resourceVersion', 'selfLink', 'uid']: self.assertIsInstance(service['metadata'][i], str) self.assertIsInstance(service['metadata']['labels'], dict) self.assertEqual(2, len(service['metadata']['labels'])) for i in ['component', 'provider']: self.assertIn(i, service['metadata']['labels']) self.assertIsInstance(service['metadata']['labels'][i], str) for i in ['clusterIP', 'ports', 'sessionAffinity', 'type']: self.assertIn(i, service['spec']) for i in ['clusterIP', 'sessionAffinity', 'type']: self.assertIsInstance(service['spec'][i], str) self.assertIsInstance(service['spec']['ports'], list) self.assertEqual(1, len(service['spec']['ports'])) port = service['spec']['ports'][0] self.assertIsInstance(port, dict) self.assertEqual(4, len(port)) for i in ['name', 'port', 'protocol', 'targetPort']: self.assertIn(i, port) for i in ['name', 'protocol']: self.assertIsInstance(port[i], str) for i in ['port', 'targetPort']: self.assertIsInstance(port[i], int)
def test_init_unknown_object_type(self): ot = "yomama" with self.assertRaises(SyntaxError): utils.create_object(obj_type=ot)
def test_init_invalid_object_type(self): ot = 666 with self.assertRaises(SyntaxError): utils.create_object(obj_type=ot)
def test_init_with_invalid_name(self): name = object() with self.assertRaises(SyntaxError): utils.create_object(name)
def test_object_as_dict(self): ot = "Service" name = "yomama" obj = utils.create_object(name=name, obj_type=ot) dico = obj.as_dict() self.assertIsInstance(dico, dict)
def test_empty_bone_groups(self): # Arrange arm = bpy.data.armatures.new('tarm') obj = bpy.data.objects.new('tobj', arm) utils.link_object(obj) utils.set_active_object(obj) b_exp0, b_non0, b_exp1, b_non1 = ('b-exportable0', 'b-non-exportable0', 'b-exportable1', 'b-non-exportable1') bpy.ops.object.mode_set(mode='EDIT') try: for n in (b_exp0, b_non0, b_exp1, b_non1): bone = arm.edit_bones.new(n) bone.tail.y = 1 for n in (b_non0, b_exp1, b_non1): bone = arm.edit_bones[n] parent = arm.edit_bones[b_exp0] bone.parent = parent finally: bpy.ops.object.mode_set(mode='POSE') bg_exp = obj.pose.bone_groups.new(name='bg-only-exportable') bg_mix = obj.pose.bone_groups.new(name='bg-mixed') bg_non = obj.pose.bone_groups.new(name='bg-only-non-exportable') bg_emp = obj.pose.bone_groups.new(name='bg-empty') obj.pose.bones[b_exp0].bone_group = bg_exp obj.pose.bones[b_non0].bone_group = bg_mix obj.pose.bones[b_exp1].bone_group = bg_mix obj.pose.bones[b_non0].bone_group = bg_non arm.bones[b_non0].xray.exportable = False arm.bones[b_non1].xray.exportable = False bmesh = utils.create_bmesh(( (0, 0, 0), (-1, -1, 0), (+1, -1, 0), (+1, +1, 0), (-1, +1, 0), ), ((0, 1, 2), (0, 2, 3), (0, 3, 4), (0, 4, 1)), True) obj_me = utils.create_object(bmesh, True) obj_me.parent = obj obj_me.xray.isroot = False vertex_group = obj_me.vertex_groups.new(name='b-exportable0') vertex_group.add(range(len(obj_me.data.vertices)), 1.0, 'REPLACE') # Act bpy.ops.export_object.xray_objects( objects='tobj', directory=self.outpath(), texture_name_from_image_path=False, export_motions=False, ) # Assert self.assertReportsNotContains('WARNING') self.assertOutputFiles({ 'tobj.object', }) content = self.getFileSafeContent('tobj.object') self.assertRegex(content, re.compile(bytes(b_exp0, 'cp1251'))) self.assertRegex(content, re.compile(bytes(b_exp1, 'cp1251'))) self.assertNotRegex(content, re.compile(bytes(b_non0, 'cp1251'))) self.assertNotRegex(content, re.compile(bytes(b_non1, 'cp1251'))) self.assertRegex(content, re.compile(bytes(bg_exp.name, 'cp1251'))) self.assertRegex(content, re.compile(bytes(bg_mix.name, 'cp1251'))) self.assertNotRegex(content, re.compile(bytes(bg_non.name, 'cp1251'))) self.assertNotRegex(content, re.compile(bytes(bg_emp.name, 'cp1251')))
def test_init_unknown_object_type(self): ot = "yomama" try: utils.create_object(obj_type=ot) except Exception as err: self.assertIsInstance(err, SyntaxError)
def test_init_invalid_object_type(self): ot = 666 try: utils.create_object(obj_type=ot) except Exception as err: self.assertIsInstance(err, SyntaxError)