Exemplo n.º 1
0
 def test(self, raw, bwcls):
     inst = OfferBlockBase()
     inst.NAME = "ResvInfoBase"
     inst.RESVINFO = create_mock()
     offers = []
     for i in range(4):
         offers.append("fwd %d" % i)
         offers.append("rev %d" % i)
     data = create_mock(["__bool__", "__len__", "pop"])
     data.__bool__.side_effect = ([True] * 4) + [False]
     data.pop.side_effect = ["resv info"] + offers
     data.__len__.return_value = 4 * inst.OFFER_LEN
     raw.return_value = data
     # Call
     inst._parse("data")
     # Tests
     inst.RESVINFO.assert_called_once_with("resv info")
     ntools.eq_(inst.info, inst.RESVINFO.return_value)
     ntools.eq_(inst.offer_hops, 4)
     assert_these_calls(bwcls, [
         call("fwd 0", "rev 0"),
         call("fwd 1", "rev 1"),
         call("fwd 2", "rev 2"),
         call("fwd 3", "rev 3"),
     ])
Exemplo n.º 2
0
 def test(self, l4_protos, ext_map):
     data = create_mock(["pop"])
     data.pop.side_effect = (
         bytes.fromhex("881103"),
         "ext0 data",
         bytes.fromhex("011699"),
         "ext1 data",
         bytes.fromhex("FF0806"),
         "ext1 data",
     )
     l4_protos.append(0xFF)
     ext0 = create_mock()
     ext1 = create_mock()
     ext_map[(7, 3)] = ext0
     ext_map[(1, 6)] = ext1
     # Call
     ext_hdrs, hdr_type, unknown = parse_extensions(data, 7)
     # Tests
     assert_these_calls(data.pop, (
         call(ExtensionHeader.SUBHDR_LEN),
         call(0x11 * ExtensionHeader.LINE_LEN - ExtensionHeader.SUBHDR_LEN),
         call(ExtensionHeader.SUBHDR_LEN),
         call(0x16 * ExtensionHeader.LINE_LEN - ExtensionHeader.SUBHDR_LEN),
         call(ExtensionHeader.SUBHDR_LEN),
         call(0x08 * ExtensionHeader.LINE_LEN - ExtensionHeader.SUBHDR_LEN),
     ))
     ntools.eq_(ext_hdrs, [ext0.return_value, ext1.return_value])
     ntools.eq_(hdr_type, 0xFF)
     ntools.eq_(unknown, {0x88: [1]})
Exemplo n.º 3
0
 def test_basic(self, _, sha):
     inst, h = self._setup()
     sha.new.return_value = h
     # Call
     ntools.eq_(inst.get_hops_hash(), 'digest')
     # Tests
     assert_these_calls(h.update, [call("t0"), call("t1")])
Exemplo n.º 4
0
    def test_with_free_up(self):
        key1 = ("1-ff00:0:300", 1)
        key2 = ("1-ff00:0:301", 1)
        now = int(time.time())
        rev_info1 = self._create_rev_info(key1[0], key1[1], timestamp=now)
        rev_info2 = self._create_rev_info(key2[0], key2[1], timestamp=now + 1)

        def check_active_side_effect(srev_info):
            del rev_cache._cache[(srev_info.rev_info().isd_as(),
                                  srev_info.rev_info().p.ifID)]
            return False

        rev_cache = RevCache(capacity=1)
        rev_cache._cache[key1] = rev_info1
        rev_cache._check_active = create_mock()
        rev_cache._check_active.side_effect = check_active_side_effect
        rev_cache.get = create_mock()
        rev_cache.get.return_value = None
        # Call
        ntools.assert_true(rev_cache.add(rev_info2))
        # Tests
        ntools.eq_(rev_cache._cache[key2], rev_info2)
        ntools.assert_true(key1 not in rev_cache._cache)
        assert_these_calls(rev_info2.rev_info().active, [call()])
        assert_these_calls(rev_cache.get, [call(key2)])
Exemplo n.º 5
0
 def test(self, server):
     topo_dict = {
         'BeaconService': {"bs1": "bs1 val"},
         'CertificateService': {"cs1": "cs1 val"},
         'PathService': {"ps1": "ps1 val", "ps2": "ps2 val"},
         'SIG': {"sig1": "sig1 val"},
         'DiscoveryService': {"ds1": "ds1 val"},
     }
     inst = Topology()
     server.side_effect = lambda v, k: "%s-%s" % (k, v)
     # Call
     inst._parse_srv_dicts(topo_dict)
     # Tests
     assert_these_calls(server, [
         call("bs1 val", "bs1"),
         call("cs1 val", "cs1"),
         call("ps1 val", "ps1"),
         call("ps2 val", "ps2"),
         call("sig1 val", "sig1"),
         call("ds1 val", "ds1"),
     ], any_order=True)
     ntools.eq_(inst.beacon_servers, ["bs1-bs1 val"])
     ntools.eq_(inst.certificate_servers, ["cs1-cs1 val"])
     ntools.eq_(sorted(inst.path_servers),
                sorted(["ps1-ps1 val", "ps2-ps2 val"]))
     ntools.eq_(inst.discovery_servers, ["ds1-ds1 val"])
Exemplo n.º 6
0
 def test_full(self, formatter, rotate, console, basic_config):
     levels = "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"
     file_handlers = [
         create_mock(["setLevel", "setFormatter"]),
         create_mock(["setLevel", "setFormatter"]),
         create_mock(["setLevel", "setFormatter"]),
         create_mock(["setLevel", "setFormatter"]),
         create_mock(["setLevel", "setFormatter"]),
     ]
     console_handler = console.return_value
     rotate.side_effect = file_handlers
     # Call
     init_logging("logbase",
                  file_level=logging.DEBUG,
                  console_level=logging.CRITICAL)
     # Tests
     rotate_calls = []
     for lvl in levels:
         rotate_calls.append(
             call("logbase.%s" % lvl,
                  maxBytes=LOG_MAX_SIZE,
                  backupCount=LOG_BACKUP_COUNT,
                  encoding="utf-8"))
     assert_these_calls(rotate, rotate_calls)
     for lvl, f_h in zip(levels, file_handlers):
         f_h.setLevel.assert_called_once_with(logging._nameToLevel[lvl])
         f_h.setFormatter.assert_called_once_with(formatter.return_value)
     console_handler.setLevel.assert_called_once_with(logging.CRITICAL)
     console_handler.setFormatter.assert_called_once_with(
         formatter.return_value)
     basic_config.assert_called_once_with(level=logging.DEBUG,
                                          handlers=file_handlers +
                                          [console_handler])
Exemplo n.º 7
0
 def test_full(self, raw):
     inst = SCIONPath()
     inst._parse_iof = create_mock()
     inst._parse_hofs = create_mock()
     inst._init_of_idxs = create_mock()
     iof_list = []
     for i in 2, 4, 6:
         iof = create_mock(["hops", "shortcut"])
         iof.hops = i
         iof.shortcut = False
         iof_list.append(iof)
     inst._parse_iof.side_effect = iof_list
     data = create_mock()
     data.side_effect = ("A IOF", "A HOFS", "B IOF", "B HOFS", "C IOF",
                         "C HOFS")
     raw.return_value = data
     # Call
     inst._parse("data")
     # Tests
     assert_these_calls(inst._parse_iof, [
         call(data, inst.A_IOF),
         call(data, inst.B_IOF),
         call(data, inst.C_IOF)
     ])
     assert_these_calls(inst._parse_hofs, [
         call(data, inst.A_HOFS, 2),
         call(data, inst.B_HOFS, 4),
         call(data, inst.C_HOFS, 6)
     ])
     inst._init_of_idxs.assert_called_once_with()
Exemplo n.º 8
0
 def test(self, raw, scmp_info):
     inst = SCMPPayload()
     data = create_mock(["pop"])
     data.pop.side_effect = (
         bytes.fromhex("0102030405060700"),
         "info",
         "cmn hdr",
         "addrs",
         "path",
         "exts",
         "l4 hdr",
     )
     raw.return_value = data
     # Call
     inst._parse("class", "type", "data")
     # Tests
     raw.assert_called_once_with("data", inst.NAME)
     ntools.eq_(inst.l4_proto, 0x07)
     pop_calls = [call(inst.META_LEN)
                  ] + [call(x * LINE_LEN) for x in range(1, 7)]
     assert_these_calls(data.pop, pop_calls)
     scmp_info.assert_called_once_with("class", "type", "info")
     ntools.eq_(inst.info, scmp_info.return_value)
     ntools.eq_(inst._cmn_hdr, "cmn hdr")
     ntools.eq_(inst._addrs, "addrs")
     ntools.eq_(inst._path, "path")
     ntools.eq_(inst._exts, "exts")
     ntools.eq_(inst._l4_hdr, "l4 hdr")
Exemplo n.º 9
0
 def test(self, raw, super_parse, isd_as):
     inst = TracerouteExt()
     inst.append_hop = create_mock()
     data = create_mock(["pop"])
     data.pop.side_effect = (
         None,
         "isd as 1",
         bytes.fromhex('1111 2222'),
         "isd as 2",
         bytes.fromhex('3333 4444'),
     )
     raw.return_value = data
     isd_as.LEN = 4
     isd_as.side_effect = "1-11", "2-22"
     dlen = inst.MIN_LEN + 2 * inst.HOP_LEN
     arg = bytes([2]) + bytes(dlen - 1)
     # Call
     inst._parse(arg)
     # Tests
     raw.assert_called_once_with(arg, "TracerouteExt", dlen, min_=True)
     super_parse.assert_called_once_with(inst, data)
     assert_these_calls(isd_as, (call("isd as 1"), call("isd as 2")))
     assert_these_calls(inst.append_hop, (
         call("1-11", 0x1111, 0x2222),
         call("2-22", 0x3333, 0x4444),
     ))
Exemplo n.º 10
0
 def test_invalid_entry(self, verify_epoch):
     rev_info = self._create_rev_info("1-1", 1, 2)
     verify_epoch.return_value = ConnectedHashTree.EPOCH_PAST
     rev_cache = RevCache()
     # Call
     ntools.assert_false(rev_cache.add(rev_info))
     assert_these_calls(verify_epoch, [call(rev_info.p.epoch)])
Exemplo n.º 11
0
 def test_setup_new_block(self):
     inst = SibraExtEphemeral()
     inst._get_ifids = create_mock()
     inst._get_ifids.side_effect = (
         ("prev_ingress", "prev_egress"),
         ("curr_ingress", "curr_egress"),
     )
     inst._get_prev_raw = create_mock()
     inst.setup = True
     inst.block_idx = 1
     inst.rel_sof_idx = 0
     prev_block = create_mock(["info", "sofs"])
     prev_block.info = create_mock(["fwd_dir"])
     prev_block.sofs = ["prev sof0", "prev sof1"]
     curr_block = create_mock(["info", "sofs"])
     curr_block.info = create_mock(["fwd_dir"])
     curr_block.sofs = ["curr sof0", "curr sof1"]
     inst.active_blocks = [prev_block, curr_block]
     inst.req_block = create_mock(["add_hop"])
     inst.path_ids = "path_ids"
     # Call
     inst._add_hop("key")
     # Tests
     assert_these_calls(inst._get_ifids, [
         call("prev sof1", prev_block.info.fwd_dir),
         call("curr sof0", curr_block.info.fwd_dir),
     ])
     inst.req_block.add_hop.assert_called_once_with(
         "prev_ingress", "curr_egress", inst._get_prev_raw.return_value,
         "key", "path_ids")
Exemplo n.º 12
0
 def test_invalid_entry(self):
     rev_info = self._create_rev_info("1-ff00:0:300",
                                      1,
                                      timestamp=int(time.time()) - 20)
     rev_cache = RevCache()
     # Call
     ntools.assert_false(rev_cache.add(rev_info))
     assert_these_calls(rev_info.rev_info().active, [call()])
Exemplo n.º 13
0
 def test(self):
     inst = PathSegmentDB()
     inst.delete = create_mock()
     inst.delete.side_effect = (DBResult.ENTRY_DELETED, DBResult.NONE,
                                DBResult.ENTRY_DELETED)
     # Call
     ntools.eq_(inst.delete_all((0, 1, 2)), 2)
     # Tests
     assert_these_calls(inst.delete, [call(i) for i in (0, 1, 2)])
Exemplo n.º 14
0
 def test(self, build_path):
     up_segments = ['up0', 'up1']
     down_segments = ['down0', 'down1']
     build_path.side_effect = ['path0', 'path1', None, 'path1']
     ntools.eq_(
         PathCombinator.build_shortcut_paths(up_segments, down_segments),
         ["path0", "path1"])
     calls = [call(*x) for x in product(up_segments, down_segments)]
     assert_these_calls(build_path, calls)
Exemplo n.º 15
0
 def test_v4(self, parse):
     parse.side_effect = iter([SCIONParseError, "v4 parsed"])
     # Call
     ntools.eq_(haddr_parse_interface("v4 addr"), "v4 parsed")
     # Tests
     assert_these_calls(parse, [
         call(AddrType.IPV6, "v4 addr"),
         call(AddrType.IPV4, "v4 addr"),
     ])
Exemplo n.º 16
0
 def test(self):
     inst = OfferBlockBase()
     inst.info = create_mock(["fail_hop"])
     inst.info.fail_hop = 2
     offer = create_mock(["min"])
     inst.offers = [offer] * 5
     # Call
     ret = inst.get_min(5)
     # Tests
     assert_these_calls(ret.min, [call(offer)] * 3)
Exemplo n.º 17
0
 def _check(self, type_lens, exp_total, exp_pad, calc_len, calc_padding):
     calc_len.side_effect = type_lens
     calc_padding.return_value = exp_pad
     # Call
     results = SCIONAddrHdr.calc_lens(1, 2)
     # Tests
     assert_these_calls(calc_len, [call(1), call(2)])
     calc_padding.assert_called_once_with(sum(type_lens),
                                          SCIONAddrHdr.BLK_SIZE)
     ntools.eq_(results, (exp_total, exp_pad))
Exemplo n.º 18
0
 def _check_three(self, curr_label, new_label):
     inst = self._setup(curr_label, b_seg=True, c_seg=True)
     # Call
     inst.reverse()
     # Tests
     assert_these_calls(
         inst._ofs.swap,
         [call(inst.A_IOF, inst.C_IOF),
          call(inst.A_HOFS, inst.C_HOFS)])
     inst._ofs.get_idx_by_label.assert_called_once_with(new_label)
Exemplo n.º 19
0
 def test_expired_entry(self):
     key = ("1-1", 1)
     default = "default"
     rev_info = "rev_info"
     rev_cache = RevCache()
     rev_cache._cache[key] = rev_info
     rev_cache._validate_entry = create_mock_full(return_value=False)
     # Call
     ntools.eq_(rev_cache.get(key, default=default), default)
     # Tests
     assert_these_calls(rev_cache._validate_entry, [call(rev_info)])
Exemplo n.º 20
0
 def test(self, hof):
     inst = SCIONPath()
     data = create_mock(["pop"])
     inst._ofs = create_mock(["set"])
     hof.side_effect = ["hof0", "hof1", "hof2"]
     # Call
     inst._parse_hofs(data, "label", 3)
     # Tests
     assert_these_calls(data.pop, [call(hof.LEN)] * 3)
     inst._ofs.set.assert_called_once_with("label",
                                           ["hof0", "hof1", "hof2"])
Exemplo n.º 21
0
 def test_peer(self):
     inst = self._setup()
     iof_1 = self._mk_iof(True)
     iof_2 = self._mk_iof(True)
     inst._ofs.get_by_label.side_effect = [iof_1], [iof_2], None
     # Call
     ntools.eq_(inst.get_as_hops(), 10)
     # Tests
     assert_these_calls(inst._ofs.get_by_label,
                        [call(l) for l in inst.IOF_LABELS])
     assert_these_calls(inst._get_as_hops, [call(iof_1), call(iof_2)])
Exemplo n.º 22
0
 def test_one(self):
     inst = self._setup()
     iof = self._mk_iof()
     inst._ofs.get_by_label.side_effect = [iof], None
     # Call
     ntools.eq_(inst.get_as_hops(), 5)
     # Tests
     assert_these_calls(
         inst._ofs.get_by_label,
         [call(inst.A_IOF), call(inst.B_IOF)])
     inst._get_as_hops.assert_called_once_with(iof)
Exemplo n.º 23
0
 def test_success(self, init, get_time):
     entries = {}
     for last_seen in 1000, 999, 996, 995, 994, 990, 1001:
         entries["entry%d" % last_seen] = last_seen
     inst = self._setup(get_time, entries)
     # Call
     inst.expire(5)
     # Tests
     assert_these_calls(inst._kazoo.delete, [
         call("/path/entry994"), call("/path/entry990")
     ], any_order=True)
Exemplo n.º 24
0
 def test_setup(self):
     inst = SibraExtEphemeral()
     inst.setup = True
     inst._parse_block = create_mock()
     inst._parse_block.side_effect = "block0", "block1"
     inst.path_lens = [3, 4, 0]
     # Call
     ntools.eq_(inst._parse_active_blocks("data"), ["block0", "block1"])
     # Tests
     assert_these_calls(inst._parse_block,
                        [call("data", 3), call("data", 4)])
Exemplo n.º 25
0
 def test_one(self):
     inst = self._setup()
     # Call
     inst.reverse()
     # Tests
     assert_these_calls(inst._ofs.reverse_up_flag,
                        [call(l) for l in inst.IOF_LABELS])
     assert_these_calls(inst._ofs.reverse_label,
                        [call(l) for l in inst.HOF_LABELS])
     inst._ofs.get_idx_by_label.assert_called_once_with(inst.A_IOF)
     inst.set_of_idxs.assert_called_once_with(
         inst._ofs.get_idx_by_label.return_value, 9)
Exemplo n.º 26
0
 def test(self, build_path):
     up_segments = ['up0', 'up1']
     down_segments = ['down0', 'down1']
     build_path.side_effect = [['path0'], ['path1'], [], ['path1']]
     peer_revs = create_mock()
     ntools.eq_(
         path_combinator.build_shortcut_paths(
             up_segments, down_segments, peer_revs),
         ["path0", "path1"])
     calls = [call(*x, peer_revs)
              for x in product(up_segments, down_segments)]
     assert_these_calls(build_path, calls)
Exemplo n.º 27
0
 def test_expired_entry(self):
     key = ("1-ff00:0:300", 1)
     default = "default"
     rev_info = "rev_info"
     srev_info = create_mock_full({"rev_info()": rev_info})
     rev_cache = RevCache()
     rev_cache._cache[key] = srev_info
     rev_cache._check_active = create_mock_full(return_value=False)
     # Call
     ntools.eq_(rev_cache.get(key, default=default), default)
     # Tests
     assert_these_calls(rev_cache._check_active, [call(srev_info)])
Exemplo n.º 28
0
 def test(self):
     key = ("1-ff00:0:300", 1)
     rev_info = self._create_rev_info(key[0], key[1])
     rev_cache = RevCache()
     rev_cache.get = create_mock()
     rev_cache.get.return_value = None
     # Call
     ntools.assert_true(rev_cache.add(rev_info))
     # Tests
     ntools.eq_(rev_cache._cache[key], rev_info)
     assert_these_calls(rev_cache.get, [call(key)])
     assert_these_calls(rev_info.rev_info().active, [call()])
Exemplo n.º 29
0
 def test_reqs(self):
     inst = self._setup()
     inst._req_map["key"] = [(0, "req0"), (1, "req1"), (2, "req2")]
     # Call
     inst._answer_reqs("key")
     # Tests
     inst._expire_reqs.assert_called_once_with("key")
     assert_these_calls(
         inst._reply,
         [call("key", "req0"),
          call("key", "req1"),
          call("key", "req2")])
     ntools.assert_not_in("key", inst._req_map)
Exemplo n.º 30
0
 def test(self, verify_epoch):
     key = ("1-1", 1)
     rev_info = self._create_rev_info(key[0], key[1], 2)
     verify_epoch.return_value = ConnectedHashTree.EPOCH_OK
     rev_cache = RevCache()
     rev_cache.get = create_mock()
     rev_cache.get.return_value = None
     # Call
     ntools.assert_true(rev_cache.add(rev_info))
     # Tests
     ntools.eq_(rev_cache._cache[key], rev_info)
     assert_these_calls(rev_cache.get, [call(key)])
     assert_these_calls(verify_epoch, [call(rev_info.p.epoch)])