예제 #1
0
 def test_get_tag(self):
     tx = MockTX("random", [1,1,1], [2,1], [0,1,4,5,9])
     self.assertEqual(EPOBCColorDefinition.get_tag(tx).padding_code, 8)
     def tmp():
         return True
     tx.raw.vin[0].prevout.is_null = tmp
     self.assertEqual(EPOBCColorDefinition.get_tag(tx), None)
예제 #2
0
 def test_compose_tx_spec(self):
     cv1 = SimpleColorValue(colordef=UNCOLORED_MARKER, value=1)
     cv2 = SimpleColorValue(colordef=self.obc, value=1)
     target1 = ColorTarget('addr1', cv1)
     target2 = ColorTarget('addr2', cv2)
     targets = [target1, target2]
     txspec = MockOpTxSpec(targets)
     self.assertTrue(isinstance(self.obc.compose_tx_spec(txspec),
                                ComposedTxSpec))
     non = EPOBCColorDefinition(2, {'txhash': 'something', 'outindex': 0})
     cv3 = SimpleColorValue(colordef=non, value=1)
     target3 = ColorTarget('addr3', cv3)
     targets = [cv3, cv2]
     txspec = MockOpTxSpec(targets)
     self.assertRaises(InvalidColorError, self.obc.compose_tx_spec, txspec)
예제 #3
0
    def test_compose_genesis_tx_spec(self):
        cv = SimpleColorValue(colordef=self.epobc, value=5)
        txspec = MockOpTxSpec([])
        self.assertRaises(InvalidTargetError,
                          EPOBCColorDefinition.compose_genesis_tx_spec, txspec)
        target = ColorTarget('addr', cv)
        txspec = MockOpTxSpec([target])
        self.assertRaises(InvalidColorError,
                          EPOBCColorDefinition.compose_genesis_tx_spec, txspec)

        cv = SimpleColorValue(colordef=GENESIS_OUTPUT_MARKER, value=5)
        target = ColorTarget('addr', cv)
        txspec = MockOpTxSpec([target])
        self.assertTrue(isinstance(
                EPOBCColorDefinition.compose_genesis_tx_spec(txspec),
                ComposedTxSpec))
예제 #4
0
 def setUp(self):
     self.colordef1 = EPOBCColorDefinition(1, {
         'txhash': 'genesis',
         'outindex': 0
     })
     self.colordef2 = OBColorDefinition(2, {
         'txhash': 'genesis',
         'outindex': 0
     })
     self.cv1 = SimpleColorValue(colordef=self.colordef1,
                                 value=1,
                                 label='test')
     self.cv2 = SimpleColorValue(colordef=self.colordef1,
                                 value=2,
                                 label='test2')
     self.cv3 = SimpleColorValue(colordef=self.colordef2, value=1)
예제 #5
0
 def setUp(self):
     self.colordef1 = EPOBCColorDefinition(1, {
         'txhash': 'genesis',
         'outindex': 0
     })
     self.colordef2 = OBColorDefinition(2, {
         'txhash': 'genesis',
         'outindex': 0
     })
     self.cv1 = SimpleColorValue(colordef=self.colordef1,
                                 value=1,
                                 label='test')
     self.cv2 = SimpleColorValue(colordef=self.colordef1,
                                 value=2,
                                 label='test2')
     self.cv3 = SimpleColorValue(colordef=self.colordef2, value=1)
     self.ct1 = ColorTarget('address1', self.cv1)
     self.ct2 = ColorTarget('address2', self.cv2)
     self.ct3 = ColorTarget('address3', self.cv3)
     self.txspec = MockOpTxSpec([self.ct1, self.ct2])
예제 #6
0
 def test_from_color_desc(self):
     cd = EPOBCColorDefinition.from_color_desc(1, "epobc:doesnmatter:0:0")
     self.assertTrue(isinstance(cd, EPOBCColorDefinition))
     self.assertRaises(InvalidColorError,
                       EPOBCColorDefinition.from_color_desc, 1,
                       "blah:doesnmatter:0:0")
예제 #7
0
 def setUp(self):
     self.epobc = EPOBCColorDefinition(1, {'txhash': 'genesis',
                                           'outindex': 0, 'height': 0})
     self.tester = ColorDefinitionTester(self.epobc)
     self.tag_class = EPOBCColorDefinition.Tag
예제 #8
0
class TestEPOBC(unittest.TestCase):

    def setUp(self):
        self.epobc = EPOBCColorDefinition(1, {'txhash': 'genesis',
                                              'outindex': 0, 'height': 0})
        self.tester = ColorDefinitionTester(self.epobc)
        self.tag_class = EPOBCColorDefinition.Tag

    def test_tag_closest_padding_code(self):
        self.assertEqual(self.tag_class.closest_padding_code(0), 0)
        for i in range(15):
            if i > 0:
                self.assertEqual(self.tag_class.closest_padding_code(2**i), i)
            self.assertEqual(self.tag_class.closest_padding_code(2**i+1), i+1)
        self.assertRaises(Exception,
                          self.tag_class.closest_padding_code, 2**63+1)

    def test_tag_from_nsequence(self):
        self.assertEqual(self.tag_class.from_nSequence(1), None)
        # xfer is 110011 in binary = 51
        xfer_tag = self.tag_class.from_nSequence(512 + 51)
        self.assertEqual(xfer_tag.is_genesis, False)
        self.assertEqual(xfer_tag.padding_code, 8)
        # genesis is 100101 in binary = 37
        genesis_tag = self.tag_class.from_nSequence(2048 + 37)
        self.assertEqual(genesis_tag.is_genesis, True)
        self.assertEqual(genesis_tag.padding_code, 32)

    def test_tag_to_nsequence(self):
        n = random.randint(0,63) * 64 + 51
        xfer_tag = self.tag_class.from_nSequence(n)
        self.assertEqual(xfer_tag.to_nSequence(), n)

    def test_get_tag(self):
        tx = MockTX("random", [1,1,1], [2,1], [0,1,4,5,9])
        self.assertEqual(EPOBCColorDefinition.get_tag(tx).padding_code, 8)
        def tmp():
            return True
        tx.raw.vin[0].prevout.is_null = tmp
        self.assertEqual(EPOBCColorDefinition.get_tag(tx), None)

    def test_run_kernel(self):
        # test the EPOBC color kernel
        test = self.tester.test

        # genesis
        # pad 8, direct
        self.assertEqual(test([9], [9], [1], "genesis", [0,2,5,6,7]), [1])
        # pad 32, split
        self.assertEqual(test([59], [33, 26], [1], "genesis", [0,2,5,6,8]), [1, None])
        # pad 16, join
        self.assertEqual(test([12, 5], [17], [1], "genesis", [0,2,5,8]), [1])

        # different outindex
#        self.epobc.genesis['outindex'] = 1
#        self.assertEqual(test([30], [27, 3], [1], "genesis", [0,2,5,6]), [None, 1])
#        self.epobc.genesis['outindex'] = 0

        # transfer
        xfer_8 = [0, 1, 4, 5, 6, 7]
        # pad 8, direct
        self.assertEqual(test([9], [9], [1], "xfer", xfer_8), [1])
        # pad 8, join
        self.assertEqual(test([10, 11], [13], [2, 3], "xfer", xfer_8), [5])
        # pad 8, split
        self.assertEqual(test([13], [10, 11], [5], "xfer", xfer_8), [2, 3])

        # 0's all around
        self.assertEqual(test([8, 8, 8], [8, 8, 8], [None, None, None], "xfer", xfer_8), [None, None, None])

        # null values before and after
        self.assertEqual(test([9, 10, 11, 20], [9, 13, 20], [None, 2, 3, None], "xfer", xfer_8), [None, 5, None])

        # ignore below-padding values -- DOES NOT PASS
#        self.assertEqual(test([5, 10, 11, 5], [5, 13, 5], [2, 3, None], "xfer", xfer_8), [None, 5, None])
        # color values don't add up the same
        self.assertEqual(test([9, 10, 11], [13, 15, 0], [1, 2, 3], "xfer", xfer_8), [5, None, None])
        self.assertEqual(test([9, 10, 11], [9, 15, 0], [1, 2, 3], "xfer", xfer_8), [1, None, None])
        self.assertEqual(test([9, 10, 11], [19, 9, 0], [1, 2, 3], "xfer", xfer_8), [None, None, None])

        # sum before color values is not the same
        self.assertEqual(test([5, 10, 11], [6, 13], [None, 2, 3], "xfer", xfer_8), [None, None])
        # nonnull color values are not adjacent
        self.assertEqual(test([10, 10, 10, 12, 10], [10, 32, 10], [None, 2, None, 4, None], "xfer", xfer_8), [None, None, None])
        # sequence before don't add up the same
        self.assertEqual(test([10, 10, 10, 11, 10], [15, 13, 10], [None, None, 2, 3, None], "xfer", xfer_8), [None, None, None])
        # sequence before does add up the same
        self.assertEqual(test([10, 10, 10, 11, 10], [9, 11, 13, 10], [None, None, 2, 3, None], "xfer", xfer_8), [None, None, 5, None])
        # split to many
        self.assertEqual(test([10, 10, 13, 40], [10, 10, 9, 9, 9, 9, 9, 5], [None, None, 5, None], "xfer", xfer_8), [None, None, 1, 1, 1, 1, 1, None])
        # combine many
        self.assertEqual(test([10, 9, 9, 9, 9, 9, 10], [10, 13, 32], [None, 1, 1, 1, 1, 1, None], "xfer", xfer_8), [None, 5, None])
        # split and combine
        self.assertEqual(test([10, 10, 11, 12, 13, 14, 10], [10, 13, 17, 14, 30], [None, 2, 3, 4, 5, 6, None], "xfer", xfer_8), [None, 5, 9, 6, None])
        # combine and split
        self.assertEqual(test([13, 17, 14, 30], [10, 11, 12, 13, 14, 10], [5, 9, 6, None], "xfer", xfer_8), [2, 3, 4, 5, 6, None])

    def test_compose_genesis_tx_spec(self):
        cv = SimpleColorValue(colordef=self.epobc, value=5)
        txspec = MockOpTxSpec([])
        self.assertRaises(InvalidTargetError,
                          EPOBCColorDefinition.compose_genesis_tx_spec, txspec)
        target = ColorTarget('addr', cv)
        txspec = MockOpTxSpec([target])
        self.assertRaises(InvalidColorError,
                          EPOBCColorDefinition.compose_genesis_tx_spec, txspec)

        cv = SimpleColorValue(colordef=GENESIS_OUTPUT_MARKER, value=5)
        target = ColorTarget('addr', cv)
        txspec = MockOpTxSpec([target])
        self.assertTrue(isinstance(
                EPOBCColorDefinition.compose_genesis_tx_spec(txspec),
                ComposedTxSpec))

    def test_compose_tx_spec(self):
        cv1 = SimpleColorValue(colordef=UNCOLORED_MARKER, value=10000)
        cv2 = SimpleColorValue(colordef=self.epobc, value=10000)
        targets = [ColorTarget('addr1', cv1), ColorTarget('addr1', cv2)]
        txspec = MockOpTxSpec(targets)
        self.assertTrue(isinstance(self.epobc.compose_tx_spec(txspec),
                                   ComposedTxSpec))
        cv1 = SimpleColorValue(colordef=UNCOLORED_MARKER, value=20000)
        cv2 = SimpleColorValue(colordef=self.epobc, value=20000)
        targets = [ColorTarget('addr1', cv1), ColorTarget('addr1', cv2)]
        txspec = MockOpTxSpec(targets)
        self.assertTrue(isinstance(self.epobc.compose_tx_spec(txspec),
                                   ComposedTxSpec))
        non = OBColorDefinition(2, {'txhash': 'something', 'outindex': 0})
        cv3 = SimpleColorValue(colordef=non, value=2)
        targets = [ColorTarget('addr1', cv3), ColorTarget('addr1', cv2)]
        txspec = MockOpTxSpec(targets)
        self.assertRaises(InvalidColorError, self.epobc.compose_tx_spec, txspec)

    def test_from_color_desc(self):
        cd = EPOBCColorDefinition.from_color_desc(1, "epobc:doesnmatter:0:0")
        self.assertTrue(isinstance(cd, EPOBCColorDefinition))
        self.assertRaises(InvalidColorError,
                          EPOBCColorDefinition.from_color_desc, 1,
                          "blah:doesnmatter:0:0")