def testRemoteOneActor(self): """Testing remote port""" rt = self.runtime id_ = rt.id peer = self.runtimes[0] peer_id = peer.id snk = utils.new_actor_wargs(rt, 'io.StandardOut', 'snk', store_tokens=1) sum_ = utils.new_actor(peer, 'std.Sum', 'sum') src = utils.new_actor(rt, 'std.CountTimer', 'src') utils.connect(rt, snk, 'token', peer_id, sum_, 'integer') utils.connect(peer, sum_, 'integer', id_, src, 'integer') time.sleep(0.5) utils.disable(rt, src) expected = expected_tokens(rt, src, 'std.Sum') actual = actual_tokens(rt, snk) assert (len(actual) > 1) self.assertListPrefix(expected, actual)
def testRemoteSlowPort(self): """Testing remote slow port and that token flow control works""" rt = self.runtime id_ = rt.id peer = self.runtimes[0] peer_id = peer.id snk1 = utils.new_actor_wargs(rt, 'io.StandardOut', 'snk1', store_tokens=1) alt = utils.new_actor(peer, 'std.Alternate', 'alt') src1 = utils.new_actor_wargs(rt, 'std.CountTimer', 'src1', sleep=0.1, steps=100) src2 = utils.new_actor_wargs(rt, 'std.CountTimer', 'src2', sleep=1.0, steps=10) utils.connect(rt, snk1, 'token', peer_id, alt, 'token') utils.connect(peer, alt, 'token_1', id_, src1, 'integer') utils.connect(peer, alt, 'token_2', id_, src2, 'integer') time.sleep(2) utils.disable(rt, src1) utils.disable(rt, src2) time.sleep(0.2) # HACK def _d(): for i in range(1,100): yield i yield i expected = list(_d()) actual = actual_tokens(rt, snk1) assert(len(actual) > 1) self.assertListPrefix(expected, actual)
def testRemoteOneActor(self): """Testing remote port""" rt = self.runtime id_ = rt.id peer = self.runtimes[0] peer_id = peer.id snk = utils.new_actor_wargs(rt, 'io.StandardOut', 'snk', store_tokens=1) sum_ = utils.new_actor(peer, 'std.Sum', 'sum') src = utils.new_actor(rt, 'std.CountTimer', 'src') utils.connect(rt, snk, 'token', peer_id, sum_, 'integer') utils.connect(peer, sum_, 'integer', id_, src, 'integer') time.sleep(0.5) utils.disable(rt, src) expected = expected_tokens(rt, src, 'std.Sum') actual = actual_tokens(rt, snk) assert(len(actual) > 1) self.assertListPrefix(expected, actual) utils.delete_actor(rt, snk) utils.delete_actor(peer, sum_) utils.delete_actor(rt, src)
def testDestroyAppWithMigratedActors(self): rt = self.runtime rt1 = self.runtimes[0] rt2 = self.runtimes[1] script = """ src : std.CountTimer() snk : io.StandardOut(store_tokens=1) src.integer > snk.token """ app_info, errors, warnings = compiler.compile(script, "simple") d = deployer.Deployer(rt, app_info) app_id = d.deploy() time.sleep(1.0) src = d.actor_map['simple:src'] snk = d.actor_map['simple:snk'] # FIXME --> remove when operating on closed pending connections during migration is fixed utils.disable(rt, src) utils.disable(rt, snk) # <-- utils.migrate(rt, snk, rt1.id) utils.migrate(rt, src, rt2.id) applications = utils.get_applications(rt) assert app_id in applications d.destroy() for retry in range(1, 5): applications = utils.get_applications(rt) if app_id in applications: print("Retrying in %s" % (retry * 0.2, )) time.sleep(0.2 * retry) else : break assert app_id not in applications for retry in range(1, 5): actors = [] actors.extend(utils.get_actors(rt)) actors.extend(utils.get_actors(rt1)) actors.extend(utils.get_actors(rt2)) intersection = [a for a in actors if a in d.actor_map.values()] if len(intersection) > 0: print("Retrying in %s" % (retry * 0.2, )) time.sleep(0.2 * retry) else: break for actor in d.actor_map.values(): assert actor not in actors