示例#1
0
class P2PTestCase(unittest.TestCase):
    NO_OF_PEERS = 1
    VISUALIZE = False

    # Simulation params
    TOP_SPEED = 140
    MAX_SPEED_CHANGE = 50
    RADIO_RANGE = 500
    WORLD_SIZE = {'width': 2000, 'height': 2000}  # in centimeters
    USE_TICKS = False
    CLOCK_SYNC = False
    MANUAL_OVERRIDE = True
    RAND_SEED = None

    def setUp(self):
        self.autoseed = random.randint(0, 9999999999)
        self.seed = self.RAND_SEED
        if not self.seed:
            self.seed = self.autoseed
        self.myRandom = random.Random(self.seed)

        self.peer_controller = None

        self.peers = [
            self.create_peer("P%d" % i, "127.0.0.1", 8500 + i)
            for i in range(self.NO_OF_PEERS)
        ]

        self.peer_controller = PeerController(self.peers,
                                              self.WORLD_SIZE,
                                              self.TOP_SPEED,
                                              self.MAX_SPEED_CHANGE,
                                              self.RADIO_RANGE,
                                              rand_seed=self.seed)

        #Start router
        self.router = Router("127.0.0.1", 8300, self.peers,
                             self.peer_controller, self.USE_TICKS)
        self.router.start()
        self.ensure_peers_ready(self.peers)
        self.router.activate_queue()

        if self.VISUALIZE:
            self.visualizer = Visualizer(self.peers, self.peer_controller)
            self.visualizer.visualize()

    def tearDown(self):
        for peer in self.peers:
            peer.kill()
        self.router.shutdown()

        #print("SEED: " + str(self.seed))

    def tick(self, num_msgs=1):
        self.router.tick(num_msgs)

    def wait_nw_idle(self):
        self.router.wait_queue_empty()

    def assertContains(self, msg, msg_part):
        try:
            self.assertTrue(msg_part in msg)
        except AssertionError:
            raise AssertionError("Msg: %s does not contain %s" %
                                 (msg, msg_part))

    def assertNotContains(self, msg, msg_part):
        try:
            self.assertFalse(msg_part in msg)
        except AssertionError:
            raise AssertionError("Msg: %s does  contain %s" % (msg, msg_part))

    def create_peer(self, name, host, port):
        peer = PeerHandler(name, host, port, self.MANUAL_OVERRIDE,
                           self.CLOCK_SYNC)
        if self.peer_controller:  # Not set on first setup
            peer.setLocation(self.peer_controller.generateNewPeerLocation())
            peer.setPeerController(self.peer_controller)

        if peer.process.returncode is not None:
            raise Exception("Peer " + peer.name + " quit immediately ")
        return peer

    def ensure_peers_ready(self, peers):
        for peer in peers:
            peer.expect_ready(20)

    def has_song_with_votes_in_playlist(self, playlist, song):
        for playlistitem in playlist:
            if playlistitem['song_name'] == song:
                if len(playlistitem['votes']) > 0:
                    return True
                return False
        return False

    def assert_song_in_playlist(self, playlist, song):
        self.assertTrue(self.has_song_with_votes_in_playlist(playlist, song),
                        "Song " + song + " was expected in playlist")
示例#2
0
class P2PTestCase(unittest.TestCase):
    NO_OF_PEERS = 1
    VISUALIZE = False

    # Simulation params
    TOP_SPEED = 140
    MAX_SPEED_CHANGE = 50
    RADIO_RANGE = 500
    WORLD_SIZE = {"width": 2000, "height": 2000}  # in centimeters
    USE_TICKS = False
    CLOCK_SYNC = False
    MANUAL_OVERRIDE = True
    RAND_SEED = None

    def setUp(self):
        self.autoseed = random.randint(0, 9999999999)
        self.seed = self.RAND_SEED
        if not self.seed:
            self.seed = self.autoseed
        self.myRandom = random.Random(self.seed)

        self.peer_controller = None

        self.peers = [self.create_peer("P%d" % i, "127.0.0.1", 8500 + i) for i in range(self.NO_OF_PEERS)]

        self.peer_controller = PeerController(
            self.peers, self.WORLD_SIZE, self.TOP_SPEED, self.MAX_SPEED_CHANGE, self.RADIO_RANGE, rand_seed=self.seed
        )

        # Start router
        self.router = Router("127.0.0.1", 8300, self.peers, self.peer_controller, self.USE_TICKS)
        self.router.start()
        self.ensure_peers_ready(self.peers)
        self.router.activate_queue()

        if self.VISUALIZE:
            self.visualizer = Visualizer(self.peers, self.peer_controller)
            self.visualizer.visualize()

    def tearDown(self):
        for peer in self.peers:
            peer.kill()
        self.router.shutdown()

        # print("SEED: " + str(self.seed))

    def tick(self, num_msgs=1):
        self.router.tick(num_msgs)

    def wait_nw_idle(self):
        self.router.wait_queue_empty()

    def assertContains(self, msg, msg_part):
        try:
            self.assertTrue(msg_part in msg)
        except AssertionError:
            raise AssertionError("Msg: %s does not contain %s" % (msg, msg_part))

    def assertNotContains(self, msg, msg_part):
        try:
            self.assertFalse(msg_part in msg)
        except AssertionError:
            raise AssertionError("Msg: %s does  contain %s" % (msg, msg_part))

    def create_peer(self, name, host, port):
        peer = PeerHandler(name, host, port, self.MANUAL_OVERRIDE, self.CLOCK_SYNC)
        if self.peer_controller:  # Not set on first setup
            peer.setLocation(self.peer_controller.generateNewPeerLocation())
            peer.setPeerController(self.peer_controller)

        if peer.process.returncode is not None:
            raise Exception("Peer " + peer.name + " quit immediately ")
        return peer

    def ensure_peers_ready(self, peers):
        for peer in peers:
            peer.expect_ready(20)

    def has_song_with_votes_in_playlist(self, playlist, song):
        for playlistitem in playlist:
            if playlistitem["song_name"] == song:
                if len(playlistitem["votes"]) > 0:
                    return True
                return False
        return False

    def assert_song_in_playlist(self, playlist, song):
        self.assertTrue(
            self.has_song_with_votes_in_playlist(playlist, song), "Song " + song + " was expected in playlist"
        )