Project: mesos
Issue MESOS-5886: FUTURE_DISPATCH may react on irrelevant dispatch.
[{{FUTURE_DISPATCH}}|https://github.com/apache/mesos/blob/e8ebbe5fe4189ef7ab046da2276a6abee41deeb2/3rdparty/libprocess/include/process/gmock.hpp#L50] uses [{{DispatchMatcher}}|https://github.com/apache/mesos/blob/e8ebbe5fe4189ef7ab046da2276a6abee41deeb2/3rdparty/libprocess/include/process/gmock.hpp#L350] to figure out whether a processed {{DispatchEvent}} is the same the user is waiting for. However, comparing {{std::type_info}} of function pointers is not enough: different class methods with same signatures will be matched. Here is the test that proves this: {noformat} class DispatchProcess : public Process { public: MOCK_METHOD0(func0, void()); MOCK_METHOD1(func1, bool(bool)); MOCK_METHOD1(func1_same_but_different, bool(bool)); MOCK_METHOD1(func2, Future(bool)); MOCK_METHOD1(func3, int(int)); MOCK_METHOD2(func4, Future(bool, int)); }; {noformat} {noformat} TEST(ProcessTest, DispatchMatch) { DispatchProcess process; PID pid = spawn(&process); Future future = FUTURE_DISPATCH( pid, &DispatchProcess::func1_same_but_different); EXPECT_CALL(process, func1(_)) .WillOnce(ReturnArg<0>()); dispatch(pid, &DispatchProcess::func1, true); AWAIT_READY(future); terminate(pid); wait(pid); } {noformat} The test passes: {noformat} [ RUN ] ProcessTest.DispatchMatch [ OK ] ProcessTest.DispatchMatch (1 ms) {noformat} This change was introduced in https://reviews.apache.org/r/28052/.
Story points: 5