(t *testing.T)
| 310 | } |
| 311 | |
| 312 | func 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 | } |
nothing calls this directly
no test coverage detected