MCPcopy Create free account
hub / github.com/apache/brpc / test_random_cancel

Function test_random_cancel

test/bthread_execution_queue_unittest.cpp:763–808  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

761}
762
763void test_random_cancel(bool use_pthread) {
764 bthread::ExecutionQueueId<AddTask> queue_id = { 0 };
765 AddMeta m;
766 m.sum = 0;
767 m.expected.store(0);
768 m.succ_times.store(0);
769 m.fail_times.store(0);
770 m.race_times.store(0);
771 ASSERT_EQ(0, bthread::execution_queue_start(&queue_id, NULL,
772 add_with_cancel, &m));
773 int64_t expected = 0;
774 for (int i = 0; i < 100000; ++i) {
775 bthread::TaskHandle h;
776 AddTask t;
777 t.value = i;
778 t.cancel_task = false;
779 ASSERT_EQ(0, bthread::execution_queue_execute(queue_id, t, NULL, &h));
780 const int r = butil::fast_rand_less_than(4);
781 expected += i;
782 if (r == 0) {
783 if (bthread::execution_queue_cancel(h) == 0) {
784 expected -= i;
785 }
786 } else if (r == 1) {
787 t.cancel_task = true;
788 t.cancel_value = i;
789 t.handle = h;
790 ASSERT_EQ(0, bthread::execution_queue_execute(queue_id, t, NULL));
791 } else if (r == 2) {
792 t.cancel_task = true;
793 t.cancel_value = i;
794 t.handle = h;
795 ASSERT_EQ(0, bthread::execution_queue_execute(
796 queue_id, t, &bthread::TASK_OPTIONS_URGENT));
797 } else {
798 // do nothing;
799 }
800 }
801 m.expected.fetch_add(expected);
802 ASSERT_EQ(0, bthread::execution_queue_stop(queue_id));
803 ASSERT_EQ(0, bthread::execution_queue_join(queue_id));
804 ASSERT_EQ(m.sum, m.expected.load());
805 LOG(INFO) << "sum=" << m.sum << " race_times=" << m.race_times
806 << " succ_times=" << m.succ_times
807 << " fail_times=" << m.fail_times;
808}
809
810TEST_F(ExecutionQueueTest, random_cancel) {
811 for (int i = 0; i < 2; ++i) {

Callers 1

TEST_FFunction · 0.85

Calls 9

execution_queue_startFunction · 0.85
execution_queue_executeFunction · 0.85
fast_rand_less_thanFunction · 0.85
execution_queue_cancelFunction · 0.85
execution_queue_stopFunction · 0.85
execution_queue_joinFunction · 0.85
fetch_addMethod · 0.80
storeMethod · 0.45
loadMethod · 0.45

Tested by

no test coverage detected