def test_updateFragments_partial(self): """ Simliar to previous test in the sense that it spawns and updates fragments. However, this time some fragments will be removed altogether, instead of just being updated. """ dibbler = self.dibbler # The original template has the following three fragments: frags_orig = { 'f1': getFragRaw(), 'f2': getFragDae(), 'f3': getFragRaw() } t1 = getTemplate('t1', fragments=frags_orig) # The fragment update will use the following data. It translates to # keeping the first intact, removing the second, and modifying the # fragment type for the third one. frags_new = { 'f2': getFragNone(), 'f3': getFragDae(), } # Add the template, spawn one instance, and verify all fragments. assert dibbler.addTemplate(t1).ok ret = dibbler.spawnTemplate(1, t1.aid) assert ret.ok self.verifyRaw(ret.data['url_frag'], 'f1', frags_orig) self.verifyDae(ret.data['url_frag'], 'f2', frags_orig) self.verifyRaw(ret.data['url_frag'], 'f3', frags_orig) # Record the current number of files in Dibbler. There must be one # 'meta.json', two raw files (one each), 3 Collada files (dae + 2 # textures). These files exist twice, once in the template store and # once in the instance store. file_cnt = dibbler.getNumFiles().data assert file_cnt == 2 * (1 + 2 * 1 + 1 * 3) # Update the fragments: keep first (raw, +0), delete second (dae, -3), # convert third from raw to dae (-1 + 3). assert dibbler.updateFragments(1, frags_new).ok # Record the current number of files in Dibbler. assert dibbler.getNumFiles().data == file_cnt + (0) + (-3) + (-1 + 3) # Verify that the first fragment is still intact, the second does not # exist anymore, and the third was updated. self.verifyRaw(ret.data['url_frag'], 'f1', frags_orig) with pytest.raises(AssertionError): self.verifyDae(ret.data['url_frag'], 'f2', frags_orig) self.verifyDae(ret.data['url_frag'], 'f3', frags_new)
def test_remove_fragments(self, client_type): """ Remove a fragment. This test is basically the integration test for 'test_dibbler.test_updateFragments_partial'. """ # Get the client for this test. client = self.clients[client_type] # Convenience. objID = 1 # The original template has the following three fragments: frags_orig = { 'fname_1': getFragRaw(), 'fname_2': getFragDae(), 'fname_3': getFragRaw(), } t1 = getTemplate('t1', fragments=frags_orig) # Add a new template and spawn it. assert client.addTemplates([t1]).ok new_obj = {'templateID': t1.aid, 'rbs': {'position': (1, 1, 1), 'velocityLin': (-1, -1, -1)}} assert client.spawn([new_obj]) == (True, None, [objID]) # Query the fragment geometries and Body State to verify that both # report three fragments. ret = client.getFragments([objID]) assert ret.ok and len(ret.data[objID]) == 3 ret = client.getObjectStates(objID) assert ret.ok and len(ret.data[objID]['frag']) == 3 # Update the fragments as follows: keep the first intact, remove the # second, and modify the third one. frags_new = { 'fname_2': getFragNone()._asdict(), 'fname_3': getFragDae()._asdict() } assert client.setFragments({objID: frags_new}).ok # After the last update there must now only be two fragments. ret = client.getFragments([objID]) assert ret.ok and len(ret.data[objID]) == 2 ret = client.getObjectStates(objID) assert ret.ok and len(ret.data[objID]['frag']) == 2