def do_test_renamed(self, N): tmp_rule_files = [ 'migrated_explicit_rules.py', 'migrated_mixed_rules.py', 'migrated_addsub_rules.py', 'renamed_rules.py' ] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/renamed_gen%d.bag" % (self.pkg_dir, N) outbag = "%s/test/renamed_gen%d.fixed.bag" % (self.pkg_dir, N) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(not False in [m[1] == [] for m in res], 'Bag not ready to be migrated') res = rosbagmigration.fixbag(mm, inbag, outbag) self.assertTrue(res, 'Bag not converted successfully') msgs = [msg for msg in rosrecord.logplayer(outbag)] self.assertTrue(len(msgs) > 0) self.assertEqual(msgs[0][1]._type, 'test_rosbagmigration/Renamed4', 'Type name is wrong') self.assertEqual(msgs[0][1].foo, struct.unpack('<d', struct.pack('<d', 2.17))[0]) self.assertEqual(msgs[0][1].bar, (8, 2, 5, 1))
def do_test_migrated_mixed(self, N): tmp_rule_files = [ 'migrated_explicit_rules.py', 'migrated_mixed_rules.py', 'migrated_addsub_rules.py' ] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/migrated_mixed_gen%d.bag" % (self.pkg_dir, N) outbag = "%s/test/migrated_mixed_gen%d.fixed.bag" % (self.pkg_dir, N) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(not False in [m[1] == [] for m in res], 'Bag not ready to be migrated') res = rosbagmigration.fixbag(mm, inbag, outbag) self.assertTrue(res, 'Bag not converted successfully') msgs = [msg for msg in rosrecord.logplayer(outbag)] self.assertTrue(len(msgs) > 0) self.assertEqual(msgs[0][1].field1.field4.afield2, struct.unpack('<f', struct.pack('<f', 58.2))[0]) self.assertEqual(msgs[0][1].field1.field4.combo_field3, "aldfkja 17") self.assertEqual(msgs[0][1].field1.field4.afield4, 82) self.assertEqual(msgs[0][1].field1.field1, 34) self.assertEqual(msgs[0][1].field1.field2, struct.unpack('<f', struct.pack('<f', 16.32))[0]) self.assertEqual(msgs[0][1].field1.field3, "kljene") self.assertEqual(msgs[0][1].field2, 59)
def do_test_constants_no_rules(self, N): tmp_rule_files = [] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/constants_gen%d.bag" % (self.pkg_dir, N) outbag = "%s/test/constants_gen%d.fixed.bag" % (self.pkg_dir, N) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(len(res[0][1]) == 1) self.assertTrue(not res[0][1][0].valid) self.assertEqual(res[0][1][0].old_class._md5sum, '06a34bda7d4ea2950ab952e89ca35d7a') self.assertEqual(res[0][1][0].new_class._md5sum, 'b45401c4d442c4da7b0a2a105075fa4a')
def do_test_partially_migrated(self, N): tmp_rule_files = [ 'migrated_explicit_rules.py', 'migrated_mixed_rules.py', 'migrated_addsub_rules.py', 'partially_migrated_rules.py' ] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/partially_migrated_gen%d.bag" % (self.pkg_dir, N) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(len(res[0][1]) == 1) self.assertTrue(not res[0][1][0].valid) self.assertEqual(res[0][1][0].old_class._md5sum, '660dfa8591c9e551b8828f9bc79116ae') self.assertEqual(res[0][1][0].new_class._md5sum, 'b942bf4a41fb2bebc502889fd8981dfe')
def test_subunmigrated(self): tmp_rule_files = [ 'migrated_explicit_rules.py', 'migrated_mixed_rules.py', 'migrated_addsub_rules.py' ] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/subunmigrated_gen1.bag" % (self.pkg_dir, ) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(len(res[0][1]) == 1) self.assertTrue(not res[0][1][0].valid) self.assertEqual(res[0][1][0].old_class._md5sum, '4b12e5ff694b0e2a31b2ea9e0bd900f4') self.assertEqual(res[0][1][0].new_class._md5sum, 'b5d640967dccef2a24697ec4b8a571ec')
def fixbag_batch(inbags): mm = rosbagmigration.MessageMigrator() for b in inbags: print "Trying to migrate: %s" % b outbag = b + '.tmp' if rosbagmigration.fixbag(mm, b, outbag): oldnamebase = b + '.old' oldname = oldnamebase i = 1 while os.path.isfile(oldname): i = i + 1 oldname = oldnamebase + str(i) os.rename(b, oldname) os.rename(outbag, b) print " Migration successful. Original stored as: %s" % oldname else: os.remove(outbag) print " Migration failed."
def do_test_constants_rules(self, N): tmp_rule_files = ['constants.bmr'] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/constants_gen%d.bag" % (self.pkg_dir, N) outbag = "%s/test/constants_gen%d.fixed.bag" % (self.pkg_dir, N) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(not False in [m[1] == [] for m in res], 'Bag not ready to be migrated') res = rosbagmigration.fixbag(mm, inbag, outbag) self.assertTrue(res, 'Bag not converted successfully') msgs = [msg for msg in rosrecord.logplayer(outbag)] self.assertTrue(len(msgs) > 0) self.assertEqual(msgs[0][1]._type, 'test_rosbagmigration/Constants', 'Type name is wrong') self.assertEqual(msgs[0][1].value, msgs[0][1].CONSTANT)
def do_test_convergent(self, N): tmp_rule_files = [ 'migrated_explicit_rules.py', 'migrated_mixed_rules.py', 'migrated_addsub_rules.py', 'renamed_rules.py', 'simple_migrated_rules.py', 'converged_rules.py' ] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/convergent_gen%d.bag" % (self.pkg_dir, N) outbag = "%s/test/convergent_gen%d.fixed.bag" % (self.pkg_dir, N) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(not False in [m[1] == [] for m in res], 'Bag not ready to be migrated') res = rosbagmigration.fixbag(mm, inbag, outbag) self.assertTrue(res, 'Bag not converted successfully') msgs = [msg for msg in rosrecord.logplayer(outbag)] self.assertTrue(len(msgs) > 0) self.assertEqual(msgs[0][1]._type, 'test_rosbagmigration/Converged', 'Type name is wrong') self.assertEqual(msgs[0][1].field1[0], struct.unpack('<f', struct.pack('<f', 1.2))[0]) self.assertEqual(msgs[0][1].field1[1], struct.unpack('<f', struct.pack('<f', 3.4))[0]) self.assertEqual(msgs[0][1].field1[2], struct.unpack('<f', struct.pack('<f', 5.6))[0]) self.assertEqual(msgs[0][1].field1[3], struct.unpack('<f', struct.pack('<f', 7.8))[0]) self.assertEqual(msgs[0][1].field2[0].data, 11) self.assertEqual(msgs[0][1].field2[1].data, 22) self.assertEqual(msgs[0][1].field2[2].data, 33) self.assertEqual(msgs[0][1].field2[3].data, 44)
def test_addsub(self): tmp_rule_files = [ 'migrated_explicit_rules.py', 'migrated_mixed_rules.py', 'migrated_addsub_rules.py' ] rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files] inbag = "%s/test/migrated_addsub_gen1.bag" % (self.pkg_dir, ) outbag = "%s/test/migrated_addsub_gen1.fixed.bag" % (self.pkg_dir, ) mm = rosbagmigration.MessageMigrator(rule_files, False) res = rosbagmigration.checkbag(mm, inbag) self.assertTrue(not False in [m[1] == [] for m in res], 'Bag not ready to be migrated') res = rosbagmigration.fixbag(mm, inbag, outbag) self.assertTrue(res, 'Bag not converted successfully') msgs = [msg for msg in rosrecord.logplayer(outbag)] self.assertTrue(len(msgs) > 0) self.assertEqual(msgs[0][1].field1.field1, 42) self.assertEqual(msgs[0][1].field2.field1, 42)
sk = math.sin(z) cc = ci*ck cs = ci*sk sc = si*ck ss = si*sk quaternion = [0.0,0.0,0.0,0.0] quaternion[0] = cj*sc - sj*cs quaternion[1] = cj*ss + sj*cc quaternion[2] = cj*cs - sj*sc quaternion[3] = cj*cc + sj*ss return quaternion migrator = rosbagmigration.MessageMigrator() identity6x6 = [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0] def repack(x): return struct.unpack('<f',struct.pack('<f',x))[0] class TestCommonMsgsMigration(unittest.TestCase): # (*) Acceleration.saved # (*) AngularAcceleration.saved # (*) AngularVelocity.saved # (*) BatteryState.saved # (*) ChannelFloat32.saved
type_match = pat.match(type_line) if type_match is None: print >> sys.stderr, "Full definition file malformed. First line should be: '[my_package/my_msg]:'" sys.exit() old_type = type_match.groups()[0] old_full_text = f.read() f.close() old_class = roslib.genpy.generate_dynamic(old_type,old_full_text)[old_type] if old_class is None: print >> sys.stderr, "Could not generate class from full definition file." sys.exit() mm = rosbagmigration.MessageMigrator(args[2:]+append_rule,not options.noplugins) migrations = rosbagmigration.checkmessages(mm, [old_class]) if migrations == []: print "Saved definition is up to date" exit(0) else: print "The following migrations need to occur:" for m in migrations: all_rules.extend(m[1]) print_trans(m[0][0].old_class, m[0][-1].new_class, 0) if len(m[1]) > 0: print " %d rules missing:"%(len(m[1])) for r in m[1]:
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # Revision $Id$ PKG = 'rosbagmigration' import roslib roslib.load_manifest(PKG) import sys import rosbagmigration if __name__ == '__main__': if len(sys.argv) >= 3: if sys.argv[2].split('.')[-1] == "bmr": print >> sys.stderr, "Second argument should be a bag, not a rule file." exit(1) mm = rosbagmigration.MessageMigrator(sys.argv[3:]) if rosbagmigration.fixbag(mm, sys.argv[1], sys.argv[2]): print "Bag migrated successfully." else: print "Bag could not be migrated" else: print "usage: fixbag.py <inbag> <outbag> [rulefile1, rulefile2, ...]"