Example #1
0
    def test_send_one(self):
        c = Channel()

        rv = next(c.send(group=[0]))
        self.assertIsInstance(rv, Performative)
        self.assertIsInstance(rv.uid, uuid.UUID)
        self.assertEqual(rv.uid, rv.connect)
Example #2
0
def mission():
    channels = {"uplink": Channel(), "beacon": Channel()}
    v = Vehicle.create(name="Space vehicle", channels=channels)
    c = Control.create(name="Mission control",
                       channels=dict(channels, vhf=Channel()),
                       group=[v.uid])
    v.group = [c.uid]
    return (c, v)
Example #3
0
 def test_put_many(self):
     c = Channel()
     group = list(range(6))
     p = Performative(group=group)
     self.assertEqual(6, c.put(p))
     for i in group:
         with self.subTest(i=i):
             self.assertFalse(c.empty(i))
Example #4
0
    def test_get_one(self):
        c = Channel()
        p = Performative(group=[0])
        self.assertEqual(1, c.put(p))
        self.assertFalse(c.empty(0))

        rv = c.get(0)
        self.assertEqual(p, rv)
        self.assertTrue(c.empty(0))

        rv = c.get(0, party=1)
        self.assertEqual(p, rv)
        self.assertTrue(c.empty(0, party=1))
Example #5
0
 def test_api(self):
     c = Channel()
     self.assertTrue(c.empty(0))
     self.assertTrue(c.empty(0, party=1))
     self.assertFalse(c.full(0))
     self.assertFalse(c.full(0, party=1))
     self.assertRaises(queue.Empty, c.get, 0)
Example #6
0
    def test_view(self):
        c = Channel()
        p = SN(uid=uuid.uuid4())
        q = SN(uid=uuid.uuid4())
        r = SN(uid=uuid.uuid4())
        init = None

        for n, a in zip(range(8), itertools.cycle(
            (Init.request, Init.promise, Exit.deliver, Init.request, Init.promise, Exit.abandon)
        )):
            with self.subTest(n=n, a=a):
                if a == Init.request:
                    init = next(c.send(sender=q.uid, group={p.uid}, action=a))
                    lost = next(c.send(sender=q.uid, group={r.uid}, action=a))
                elif a == Init.promise:
                    rv = list(c.respond(p, actions={Init.request: a}))
                    self.assertEqual(2, len(rv))
                    self.assertEqual(init, rv[0])
                    self.assertEqual(p.uid, rv[1].sender)
                    self.assertEqual({q.uid}, rv[1].group)
                    self.assertEqual(init.connect, rv[1].connect)
                else:
                    rv = c.reply(p, init, action=a)
                    self.assertIsInstance(rv, Performative)
                    self.assertEqual(p.uid, rv.sender)
                    self.assertEqual({q.uid}, rv.group)
                    self.assertEqual(init.connect, rv.connect)

                v = list(c.view(p.uid).values())
                self.assertFalse(
                    any(m for i in v for m in i if r.uid in m.group)
                )
                if n == 2:
                    self.assertEqual(1, len(v))
                    self.assertEqual(3, len(v[0]))
                    self.assertEqual(Exit.deliver, v[0][-1].action, v[0])
                elif n == 5:
                    self.assertEqual(2, len(v))
                    self.assertEqual(3, len(v[1]))
                    self.assertEqual(Exit.abandon, v[1][-1].action, v[1])
Example #7
0
def promise(**kwargs):
    name = kwargs.pop("name", "brew_tea")
    channels = {"public": Channel()}
    return Brew.create(name=name, channels=channels, **kwargs)
Example #8
0
    def test_get_many(self):
        c = Channel()
        data = [Performative(group=[0])] * 6
        for p in data:
            c.put(p)

        for n, p in enumerate(data):
            with self.subTest(n=n, p=p):
                self.assertFalse(c.empty(0))
                self.assertFalse(c.empty(0, party=1), c.ready)
                self.assertEqual(p, c.get(0))
                self.assertEqual(p, c.get(0, party=1))

        self.assertTrue(c.empty(0))
        self.assertTrue(c.empty(0, party=1))
        self.assertFalse(c.empty(0, party=2))
Example #9
0
 def test_put_one_in_group(self):
     c = Channel()
     p = Performative(group=[0])
     self.assertEqual(1, c.put(p))
     self.assertFalse(c.empty(0))
Example #10
0
 def test_put_empty_group(self):
     c = Channel()
     p = Performative(group=[])
     self.assertIsNone(c.put(p))
Example #11
0
 def test_put_plain_object(self):
     c = Channel()
     self.assertRaises(AttributeError, c.put, 0)