Beispiel #1
0
class TestPOBC(unittest.TestCase):

    def setUp(self):
        self.pobc = POBColorDefinition(1, {'txhash': 'genesis', 'outindex': 0})
        self.tester = ColorDefinitionTester(self.pobc)

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

        # genesis
        self.assertEqual(test([10001], [10001], [1], "genesis"), [1])
        self.assertEqual(test([40001], [10001, 30000], [1], "genesis"), [1, None])
        self.assertEqual(test([10000, 1], [10001], [1], "genesis"), [1])
        self.pobc.genesis['outindex'] = 1
        self.assertEqual(test([40001], [30000, 10001], [1], "genesis"), [None, 1])
        self.pobc.genesis['outindex'] = 0
        # simple transfer
        self.assertEqual(test([10001], [10001], [1]), [1])
        # canonical split
        self.assertEqual(test([10002, 10003], [10005], [2, 3]), [5])
        # canonical combine
        self.assertEqual(test([10005], [10002, 10003], [5]), [2, 3])
        # null values before and after
        self.assertEqual(test([10001, 10002, 10003, 50000], [10001, 10005, 50000], [None, 2, 3, None]), [None, 5, None])
        # ignore below-padding values
        self.assertEqual(test([10001, 10002, 10003, 50000, 100, 20000], [10001, 10005, 100, 70000, 100], [None, 2, 3, None]), [None, 5])
        # color values don't add up the same
        self.assertEqual(test([10001, 10002, 10003, 10001, 50000], [10001, 10005, 50001], [None, 2, 3, 1, None]), [None, None, None])
        # value before is not the same
        self.assertEqual(test([10001, 10002, 10003, 50000], [10002, 10005, 49999], [None, 2, 3, None]), [None, None, None])
        # nonnull color values are not adjacent
        self.assertEqual(test([10001, 10002, 10003, 10004, 50000], [10001, 10006, 49999], [None, 2, None, 4, None]), [None, None, None])
        # sequence before don't add up the same
        self.assertEqual(test([10005, 10001, 10002, 10003, 50000], [10004, 10001, 10005, 40000], [None, None, 2, 3, None]), [None, None, None, None])
        # sequence before does add up the same
        self.assertEqual(test([10005, 10001, 10002, 10003, 50001], [10005, 10001, 10005, 40000], [None, None, 2, 3, None]), [None, None, 5, None])
        # split to many
        self.assertEqual(test([10005, 10001, 10005, 50001], [10005, 10001, 10001, 10001, 10001, 10001, 10001, 40000], [None, None, 5, None]), [None, None, 1, 1, 1, 1, 1, None])
        # combine many
        self.assertEqual(test([10005, 10001, 10001, 10001, 10001, 10001, 10001, 40000], [10005, 10001, 10005, 50001], [None, None, 1, 1, 1, 1, 1, None]), [None, None, 5, None])
        # split and combine
        self.assertEqual(test([10001, 10002, 10003, 10004, 10005, 10006, 50000], [10001, 10005, 10009, 10006, 50000], [None, 2, 3, 4, 5, 6, None]), [None, 5, 9, 6, None])
        # combine and split
        self.assertEqual(test([10005, 10009, 10006, 50000], [10002, 10003, 10004, 10005, 10006, 50000], [5, 9, 6, None]), [2, 3, 4, 5, 6, None])

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

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

    def test_compose_tx_spec(self):
        cv1 = SimpleColorValue(colordef=UNCOLORED_MARKER, value=10000)
        cv2 = SimpleColorValue(colordef=self.pobc, value=10000)
        targets = [ColorTarget('addr1', cv1), ColorTarget('addr1', cv2)]
        txspec = MockOpTxSpec(targets)
        self.assertTrue(isinstance(self.pobc.compose_tx_spec(txspec),
                                   ComposedTxSpec))
        cv1 = SimpleColorValue(colordef=UNCOLORED_MARKER, value=20000)
        cv2 = SimpleColorValue(colordef=self.pobc, value=20000)
        targets = [ColorTarget('addr1', cv1), ColorTarget('addr1', cv2)]
        txspec = MockOpTxSpec(targets)
        self.assertTrue(isinstance(self.pobc.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.pobc.compose_tx_spec, txspec)

    def test_from_color_desc(self):
        cd = POBColorDefinition.from_color_desc(1, "pobc:doesnmatter:0:0")
        self.assertTrue(isinstance(cd, POBColorDefinition))
        self.assertRaises(InvalidColorError,
                          POBColorDefinition.from_color_desc, 1,
                          "blah:doesnmatter:0:0")
Beispiel #2
0
class TestPOBC(unittest.TestCase):
    def setUp(self):
        self.pobc = POBColorDefinition(1, {'txhash': 'genesis', 'outindex': 0})
        self.tester = ColorDefinitionTester(self.pobc)

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

        # genesis
        self.assertEqual(test([10001], [10001], [1], "genesis"), [1])
        self.assertEqual(test([40001], [10001, 30000], [1], "genesis"),
                         [1, None])
        self.assertEqual(test([10000, 1], [10001], [1], "genesis"), [1])
        self.pobc.genesis['outindex'] = 1
        self.assertEqual(test([40001], [30000, 10001], [1], "genesis"),
                         [None, 1])
        self.pobc.genesis['outindex'] = 0
        # simple transfer
        self.assertEqual(test([10001], [10001], [1]), [1])
        # canonical split
        self.assertEqual(test([10002, 10003], [10005], [2, 3]), [5])
        # canonical combine
        self.assertEqual(test([10005], [10002, 10003], [5]), [2, 3])
        # null values before and after
        self.assertEqual(
            test([10001, 10002, 10003, 50000], [10001, 10005, 50000],
                 [None, 2, 3, None]), [None, 5, None])
        # ignore below-padding values
        self.assertEqual(
            test([10001, 10002, 10003, 50000, 100, 20000],
                 [10001, 10005, 100, 70000, 100], [None, 2, 3, None]),
            [None, 5])
        # color values don't add up the same
        self.assertEqual(
            test([10001, 10002, 10003, 10001, 50000], [10001, 10005, 50001],
                 [None, 2, 3, 1, None]), [None, None, None])
        # value before is not the same
        self.assertEqual(
            test([10001, 10002, 10003, 50000], [10002, 10005, 49999],
                 [None, 2, 3, None]), [None, None, None])
        # nonnull color values are not adjacent
        self.assertEqual(
            test([10001, 10002, 10003, 10004, 50000], [10001, 10006, 49999],
                 [None, 2, None, 4, None]), [None, None, None])
        # sequence before don't add up the same
        self.assertEqual(
            test([10005, 10001, 10002, 10003, 50000],
                 [10004, 10001, 10005, 40000], [None, None, 2, 3, None]),
            [None, None, None, None])
        # sequence before does add up the same
        self.assertEqual(
            test([10005, 10001, 10002, 10003, 50001],
                 [10005, 10001, 10005, 40000], [None, None, 2, 3, None]),
            [None, None, 5, None])
        # split to many
        self.assertEqual(
            test([10005, 10001, 10005, 50001],
                 [10005, 10001, 10001, 10001, 10001, 10001, 10001, 40000],
                 [None, None, 5, None]), [None, None, 1, 1, 1, 1, 1, None])
        # combine many
        self.assertEqual(
            test([10005, 10001, 10001, 10001, 10001, 10001, 10001, 40000],
                 [10005, 10001, 10005, 50001],
                 [None, None, 1, 1, 1, 1, 1, None]), [None, None, 5, None])
        # split and combine
        self.assertEqual(
            test([10001, 10002, 10003, 10004, 10005, 10006, 50000],
                 [10001, 10005, 10009, 10006, 50000],
                 [None, 2, 3, 4, 5, 6, None]), [None, 5, 9, 6, None])
        # combine and split
        self.assertEqual(
            test([10005, 10009, 10006, 50000],
                 [10002, 10003, 10004, 10005, 10006, 50000], [5, 9, 6, None]),
            [2, 3, 4, 5, 6, None])

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

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

    def test_compose_tx_spec(self):
        cv1 = SimpleColorValue(colordef=UNCOLORED_MARKER, value=10000)
        cv2 = SimpleColorValue(colordef=self.pobc, value=10000)
        targets = [ColorTarget('addr1', cv1), ColorTarget('addr1', cv2)]
        txspec = MockOpTxSpec(targets)
        self.assertTrue(
            isinstance(self.pobc.compose_tx_spec(txspec), ComposedTxSpec))
        cv1 = SimpleColorValue(colordef=UNCOLORED_MARKER, value=20000)
        cv2 = SimpleColorValue(colordef=self.pobc, value=20000)
        targets = [ColorTarget('addr1', cv1), ColorTarget('addr1', cv2)]
        txspec = MockOpTxSpec(targets)
        self.assertTrue(
            isinstance(self.pobc.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.pobc.compose_tx_spec, txspec)

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