86 explicit FakeOIDCLoginRequest(
const std::chrono::milliseconds &sleepFor)
87 : sleepFor(sleepFor), abortCalled(0), recorder(
nullptr)
89 explicit FakeOIDCLoginRequest(
const std::chrono::milliseconds &sleepFor,
const std::shared_ptr<StateRecorder> &detector)
90 : sleepFor(sleepFor), abortCalled(0), recorder(detector)
93 ~FakeOIDCLoginRequest()
override
95 addAction(
"destroyed");
98 std::unique_ptr<::OIDCState>
execute()
override
100 addAction(
"execute-before-sleep");
101 std::this_thread::sleep_for(sleepFor);
102 addAction(
"execute-after-sleep");
103 return std::unique_ptr<::OIDCState>(new ::OIDCState(
"at",
"rt", 200,
false, {},
::IdToken({}, {})));
111 void addAction(
const std::string &action)
113 if (recorder !=
nullptr) recorder->addAction(action);
116 std::chrono::milliseconds sleepFor;
117 volatile std::uint64_t abortCalled;
118 std::shared_ptr<StateRecorder> recorder;
124 void SetUp()
override
126 clock = ::ClockMock::createShared();
127 oidcLogin = ::OIDCLoginMock::createShared();
128 oidcClient = ::OIDCClientMock::createShared();
129 sessionEventListener = std::make_shared<SessionEventListener>();
131 EXPECT_CALL(*clock, epochSeconds()).WillRepeatedly(::Return(100));
134 std::shared_ptr<::ClockMock> clock;
135 std::shared_ptr<::OIDCLoginMock> oidcLogin;
136 std::shared_ptr<::OIDCClientMock> oidcClient;
137 std::shared_ptr<SessionEventListener> sessionEventListener;
140 std::shared_ptr<::OIDCSessionImpl> session(
141 std::unique_ptr<::OIDCState> state,
142 std::uint64_t validitySafetyMarginS = 10,
143 std::chrono::milliseconds loginTimeout = std::chrono::milliseconds(0)
146 return std::make_shared<::OIDCSessionImpl>(
151 sessionEventListener,
152 validitySafetyMarginS,
156 std::shared_ptr<::OIDCSessionImpl> session(
157 const ::OIDCState &state,
158 std::uint64_t validitySafetyMarginS = 10,
159 std::chrono::milliseconds loginTimeout = std::chrono::milliseconds(0)
162 return session(std::unique_ptr<::OIDCState>(new ::OIDCState(state)), validitySafetyMarginS, loginTimeout);
164 std::shared_ptr<::OIDCSessionImpl> session_without_state()
166 return session(
nullptr);
168 std::shared_ptr<::OIDCSessionImpl> session_without_access_token()
172 std::shared_ptr<::OIDCSessionImpl> infinite_session(std::chrono::milliseconds loginTimeout = std::chrono::milliseconds (0))
180 std::shared_ptr<::OIDCSessionImpl> session_that_expires_at(
const std::int64_t expiresAt,
const bool refreshable =
true)
182 return session(
::OIDCState(
"at", (refreshable ?
"rt" :
""), expiresAt,
false, {},
::IdToken({}, {})));
186 return new ::OIDCState(
195 void stubSuccessfulRefresh()
197 auto refreshRequest = new ::OIDCRefreshRequestMock();
198 auto refreshedState = createRefreshedState();
200 EXPECT_CALL(*oidcClient, refresh(::_)).WillOnce(::Return(std::unique_ptr<::OIDCRefreshRequestMock>(refreshRequest)));
201 EXPECT_CALL(*refreshRequest, execute()).WillOnce(::Return(std::unique_ptr<::OIDCState>(refreshedState)));
203 void stubOAuthInvalidGrantRefresh()
205 auto refreshRequest = new ::OIDCRefreshRequestMock();
207 EXPECT_CALL(*oidcClient, refresh(::_)).WillOnce(::Return(std::unique_ptr<::OIDCRefreshRequestMock>(refreshRequest)));
208 EXPECT_CALL(*refreshRequest, execute()).WillOnce(::Throw(
::OAuthInvalidGrant(oauth::OAuthException::REFRESH_REQUEST,
"",
"")));
212 auto loginRequest = new ::OIDCLoginRequestMock();
214 EXPECT_CALL(*oidcLogin, login()).WillOnce(::Return(std::unique_ptr<::OIDCLoginRequestMock>(loginRequest)));
220 auto loginRequest = stubLogin();
221 auto state = createRefreshedState();
223 EXPECT_CALL(*loginRequest, execute()).WillOnce(::Return(std::unique_ptr<::OIDCState>(state)));