MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestShouldCheckAdminRBAC

Function TestShouldCheckAdminRBAC

rest/handler_test.go:157–224  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

155}
156
157func TestShouldCheckAdminRBAC(t *testing.T) {
158 for _, requireInterfaceAuth := range []bool{false, true} {
159 t.Run(fmt.Sprintf("requireInterfaceAuth=%t", requireInterfaceAuth), func(t *testing.T) {
160 config := BootstrapStartupConfigForTest(t)
161 config.API.AdminInterfaceAuthentication = base.Ptr(requireInterfaceAuth)
162 config.API.MetricsInterfaceAuthentication = base.Ptr(requireInterfaceAuth)
163 sc, closeFn := StartServerWithConfig(t, &config)
164 defer closeFn()
165
166 for _, sgcollectable := range []bool{true, false} {
167 t.Run(fmt.Sprintf("sgcollectable=%t", sgcollectable), func(t *testing.T) {
168 // make sure assertion counts are correct
169 require.Equal(t, int64(0), base.SyncGatewayStats.GlobalStats.ResourceUtilizationStats().AssertionFailCount.Value())
170 defer func() {
171 base.SyncGatewayStats.GlobalStats.ResourceUtilizationStats().AssertionFailCount.Set(0)
172 }()
173 adminHandler := newHandler(sc, adminPrivs, adminServer, httptest.NewRecorder(), &http.Request{}, handlerOptions{sgcollect: sgcollectable})
174 metricsHandler := newHandler(sc, metricsPrivs, metricsServer, httptest.NewRecorder(), &http.Request{}, handlerOptions{sgcollect: sgcollectable})
175 if requireInterfaceAuth {
176 require.True(t, adminHandler.shouldCheckAdminRBAC())
177 require.True(t, metricsHandler.shouldCheckAdminRBAC())
178 } else {
179 require.False(t, adminHandler.shouldCheckAdminRBAC())
180
181 require.False(t, metricsHandler.shouldCheckAdminRBAC())
182 }
183 invalidAuthHeader := http.Header{}
184 invalidAuthHeader.Add("Authorization", "SGCollect invalid")
185 // with invalid sgcollect token
186 adminHandler = newHandler(sc, adminPrivs, adminServer, httptest.NewRecorder(), &http.Request{Header: invalidAuthHeader}, handlerOptions{sgcollect: sgcollectable})
187 metricsHandler = newHandler(sc, metricsPrivs, metricsServer, httptest.NewRecorder(), &http.Request{Header: invalidAuthHeader}, handlerOptions{sgcollect: sgcollectable})
188 if requireInterfaceAuth {
189 if base.IsDevMode() && !sgcollectable {
190 require.PanicsWithValue(t, base.AssertionFailedPrefix+sgcollectTokenInvalidRequest, func() { adminHandler.shouldCheckAdminRBAC() })
191 } else {
192 require.True(t, adminHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth")
193 }
194 require.True(t, metricsHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth")
195 } else {
196 require.False(t, adminHandler.shouldCheckAdminRBAC())
197 require.False(t, metricsHandler.shouldCheckAdminRBAC())
198
199 }
200 // with valid sgcollect token, but sgcollect on the handler is disabled
201 require.NoError(t, sc.SGCollect.createNewToken())
202
203 validAuthHeader := http.Header{}
204 validAuthHeader.Add("Authorization", fmt.Sprintf("SGCollect %s", sc.SGCollect.Token))
205 adminHandler = newHandler(sc, adminPrivs, adminServer, httptest.NewRecorder(), &http.Request{Header: validAuthHeader}, handlerOptions{sgcollect: false})
206 metricsHandler = newHandler(sc, metricsPrivs, metricsServer, httptest.NewRecorder(), &http.Request{Header: validAuthHeader}, handlerOptions{sgcollect: false})
207 if requireInterfaceAuth {
208 if base.IsDevMode() {
209 require.PanicsWithValue(t, base.AssertionFailedPrefix+sgcollectTokenInvalidRequest, func() { adminHandler.shouldCheckAdminRBAC() })
210 } else {
211 require.True(t, adminHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth")
212 }
213 require.True(t, metricsHandler.shouldCheckAdminRBAC(), "expected invalid token to still require auth")
214 } else {

Callers

nothing calls this directly

Calls 13

PtrFunction · 0.92
IsDevModeFunction · 0.92
StartServerWithConfigFunction · 0.85
newHandlerFunction · 0.85
shouldCheckAdminRBACMethod · 0.80
createNewTokenMethod · 0.80
RunMethod · 0.65
EqualMethod · 0.45
ValueMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected