Пример #1
0
    def test_double_b_alt_successful_transfer(self):
        ch = self.chan()

        def thread():
            ch.b_put(c.b_alt([ch, 'success']))

        threading.Thread(target=thread).start()
        self.assertEqual(c.b_alt(ch), ('success', ch))
        self.assertEqual(ch.b_get(), (True, ch))
Пример #2
0
 def test_multiple_successful_get_on_initial_request(self):
     successGetCh = self.chan()
     cancelGetCh = self.chan()
     cancelPutCh = self.chan()
     successGetCh.f_put('success')
     time.sleep(0.1)
     self.assertEqual(
         c.b_alt(cancelGetCh,
                 successGetCh, [cancelPutCh, 'noSend'],
                 priority=True), ('success', successGetCh))
     self._confirm_chs_not_closed(successGetCh, cancelGetCh, cancelPutCh)
Пример #3
0
 def test_close_before_put(self):
     closedPutCh = self.chan(1)
     cancelPutCh = self.chan(1)
     cancelPutCh.b_put('fill buffer')
     cancelGetCh = self.chan(1)
     closedPutCh.close()
     self.assertEqual(
         c.b_alt(cancelGetCh, [closedPutCh, 'noSend'],
                 [cancelPutCh, 'noSend'],
                 priority=True), (False, closedPutCh))
     self.assertIsNone(closedPutCh.b_get())
Пример #4
0
    def test_multiple_successful_get_on_initial_request(self):
        successGetCh = self.chan(1)
        successGetCh.b_put('success')
        cancelGetCh = self.chan(1)
        cancelPutCh = self.chan(1)
        cancelPutCh.b_put('fill buffer')

        self.assertEqual(
            c.b_alt(cancelGetCh,
                    successGetCh, [cancelPutCh, 'noSend'],
                    priority=True), ('success', successGetCh))
Пример #5
0
    def test_single_successful_get_on_wait(self):
        ch = self.chan()

        def thread():
            time.sleep(0.1)
            ch.f_put('success')
            ch.f_put('notClosed')

        threading.Thread(target=thread).start()
        self.assertEqual(c.b_alt(ch), ('success', ch))
        self.assertEqual(ch.b_get(), 'notClosed')
Пример #6
0
 def test_close_before_put(self):
     closedPutCh = self.chan()
     cancelPutCh = self.chan()
     cancelGetCh = self.chan()
     closedPutCh.close()
     self.assertEqual(
         c.b_alt(cancelGetCh, [closedPutCh, 'noSend'],
                 [cancelPutCh, 'noSend'],
                 priority=True), (False, closedPutCh))
     self.assertIsNone(closedPutCh.b_get())
     self._confirm_chs_not_closed(cancelPutCh, cancelGetCh)
Пример #7
0
    def test_multiple_successful_put_on_intial_request(self):
        successPutCh = self.chan(1)
        cancelGetCh = self.chan(1)
        cancelPutCh = self.chan(1)
        cancelPutCh.b_put('fill buffer')

        altValue = c.b_alt(cancelGetCh, [cancelPutCh, 'noSend'],
                           [successPutCh, 'success'],
                           priority=True)

        self.assertEqual(altValue, (True, successPutCh))
        self.assertEqual(successPutCh.b_get(), 'success')
Пример #8
0
    def test_multiple_successful_get_on_wait(self):
        successGetCh = self.chan(1)
        cancelGetCh = self.chan(1)
        cancelPutCh = self.chan(1)
        cancelPutCh.b_put('fill buffer')

        def thread():
            time.sleep(0.1)
            successGetCh.b_put('success')

        threading.Thread(target=thread).start()
        self.assertEqual(
            c.b_alt(cancelGetCh,
                    successGetCh, [cancelPutCh, 'noSend'],
                    priority=True), ('success', successGetCh))
Пример #9
0
    def test_xform_state_is_not_modified_when_canceled(self):
        xformCh = self.chan(1, xf.take(2))
        xformCh.b_put('firstTake')
        ch = self.chan()

        def thread():
            time.sleep(0.1)
            ch.b_put('altValue')

        threading.Thread(target=thread).start()
        self.assertEqual(
            c.b_alt(ch, [xformCh, 'do not modify xform state'], priority=True),
            ('altValue', ch))
        xformCh.f_put('secondTake')
        xformCh.f_put('dropMe')
        self.assertEqual(b_list(xformCh), ['firstTake', 'secondTake'])
Пример #10
0
    def test_close_while_waiting_get(self):
        closeGetCh = self.chan()
        cancelGetCh = self.chan()
        cancelPutCh = self.chan()

        def thread():
            time.sleep(0.1)
            closeGetCh.close()

        threading.Thread(target=thread).start()
        self.assertEqual(
            c.b_alt(cancelGetCh,
                    closeGetCh, [cancelPutCh, 'noSend'],
                    priority=True), (None, closeGetCh))
        self.assertIsNone(closeGetCh.b_get())
        self._confirm_chs_not_closed(cancelPutCh, cancelGetCh)
Пример #11
0
    def test_close_while_waiting_put(self):
        closePutCh = self.chan(1)
        closePutCh.b_put('fill buffer')
        cancelGetCh = self.chan(1)
        cancelPutCh = self.chan(1)
        cancelPutCh.b_put('fill buffer')

        def thread():
            time.sleep(0.1)
            closePutCh.close()
            closePutCh.b_get()

        threading.Thread(target=thread).start()
        self.assertEqual(
            c.b_alt(cancelGetCh, [closePutCh, 'success'],
                    [cancelPutCh, 'noSend'],
                    priority=True), (True, closePutCh))
        self.assertEqual(closePutCh.b_get(), 'success')
        self.assertIsNone(closePutCh.b_get())
Пример #12
0
 def thread():
     successPutCh.b_put(
         c.b_alt(cancelGetCh, [successPutCh, 'success'],
                 [cancelPutCh, 'noSend'],
                 priority=True))
Пример #13
0
 def test_b_alt_default_when_available(self):
     ch = chan(1)
     ch.b_put('success')
     self.assertEqual(c.b_alt(ch, default='ignore me'), ('success', ch))
Пример #14
0
 def test_single_successful_get_on_initial_request(self):
     ch = self.chan()
     ch.f_put('success')
     ch.f_put('notClosed')
     self.assertEqual(c.b_alt(ch), ('success', ch))
     self.assertEqual(ch.b_get(), 'notClosed')
Пример #15
0
 def test_no_operations(self):
     with self.assertRaises(ValueError):
         c.b_alt()
Пример #16
0
 def thread():
     time.sleep(0.1)
     ch.b_put(c.b_alt([ch, 'success']))
Пример #17
0
 def thread():
     ch.b_put(c.b_alt([ch, 'success']))
Пример #18
0
 def test_get_put_same_channel(self):
     ch = self.chan()
     with self.assertRaises(ValueError):
         c.b_alt(ch, [ch, 'success'], priority=True)
Пример #19
0
    def test_double_b_alt_successful_transfer(self):
        ch = self.chan(1)

        self.assertEqual(c.b_alt([ch, 'success']), (True, ch))
        self.assertEqual(c.b_alt(ch), ('success', ch))
Пример #20
0
 def test_b_alt_default_when_unavailable(self):
     ch = chan()
     self.assertEqual(c.b_alt(ch, default='success'),
                      ('success', 'default'))