MCPcopy
hub / github.com/nats-io/nats.go / TestPermViolation

Function TestPermViolation

test/auth_test.go:312–369  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

310}
311
312func TestPermViolation(t *testing.T) {
313 opts := test.DefaultTestOptions
314 opts.Port = 8232
315 opts.Users = []*server.User{
316 {
317 Username: "ivan",
318 Password: "pwd",
319 Permissions: &server.Permissions{
320 Publish: &server.SubjectPermission{Allow: []string{"Foo"}},
321 Subscribe: &server.SubjectPermission{Allow: []string{"Bar"}},
322 },
323 },
324 }
325 s := RunServerWithOptions(&opts)
326 defer s.Shutdown()
327
328 errCh := make(chan error, 2)
329 errCB := func(_ *nats.Conn, _ *nats.Subscription, err error) {
330 errCh <- err
331 }
332 nc, err := nats.Connect(
333 fmt.Sprintf("nats://ivan:pwd@127.0.0.1:%d", opts.Port),
334 nats.ErrorHandler(errCB))
335 if err != nil {
336 t.Fatalf("Error on connect: %v", err)
337 }
338 defer nc.Close()
339
340 // Cause a publish error
341 nc.Publish("Bar", []byte("fail"))
342 // Cause a subscribe error
343 nc.Subscribe("Foo", func(_ *nats.Msg) {})
344
345 expectedErrorTypes := []string{"publish", "subscription"}
346 for _, expectedErr := range expectedErrorTypes {
347 select {
348 case e := <-errCh:
349 if !strings.Contains(strings.ToLower(e.Error()), nats.PERMISSIONS_ERR) {
350 t.Fatalf("Did not receive error about permissions")
351 }
352 if !strings.Contains(strings.ToLower(e.Error()), expectedErr) {
353 t.Fatalf("Did not receive error about %q, got %v", expectedErr, e.Error())
354 }
355 // Make sure subject is not converted to lower case
356 if expectedErr == "publish" && !strings.Contains(e.Error(), "Bar") {
357 t.Fatalf("Subject Bar not found in error: %v", e)
358 } else if expectedErr == "subscribe" && !strings.Contains(e.Error(), "Foo") {
359 t.Fatalf("Subject Foo not found in error: %v", e)
360 }
361 case <-time.After(2 * time.Second):
362 t.Fatalf("Did not get the permission error")
363 }
364 }
365 // Make sure connection has not been closed
366 if nc.IsClosed() {
367 t.Fatal("Connection should be not be closed")
368 }
369}

Callers

nothing calls this directly

Calls 9

ConnectMethod · 0.80
ErrorHandlerMethod · 0.80
FatalfMethod · 0.80
IsClosedMethod · 0.80
RunServerWithOptionsFunction · 0.70
PublishMethod · 0.65
SubscribeMethod · 0.65
ErrorMethod · 0.65
CloseMethod · 0.45

Tested by

no test coverage detected