TestServiceRetrieval tests that individual services can be retrieved.
(t *testing.T)
| 395 | |
| 396 | // TestServiceRetrieval tests that individual services can be retrieved. |
| 397 | func TestServiceRetrieval(t *testing.T) { |
| 398 | // Create a simple stack and register two service types |
| 399 | stack, err := New(testNodeConfig()) |
| 400 | if err != nil { |
| 401 | t.Fatalf("failed to create protocol stack: %v", err) |
| 402 | } |
| 403 | if err := stack.Register(NewNoopService); err != nil { |
| 404 | t.Fatalf("noop service registration failed: %v", err) |
| 405 | } |
| 406 | if err := stack.Register(NewInstrumentedService); err != nil { |
| 407 | t.Fatalf("instrumented service registration failed: %v", err) |
| 408 | } |
| 409 | // Make sure none of the services can be retrieved until started |
| 410 | var noopServ *NoopService |
| 411 | if err := stack.Service(&noopServ); err != ErrNodeStopped { |
| 412 | t.Fatalf("noop service retrieval mismatch: have %v, want %v", err, ErrNodeStopped) |
| 413 | } |
| 414 | var instServ *InstrumentedService |
| 415 | if err := stack.Service(&instServ); err != ErrNodeStopped { |
| 416 | t.Fatalf("instrumented service retrieval mismatch: have %v, want %v", err, ErrNodeStopped) |
| 417 | } |
| 418 | // Start the stack and ensure everything is retrievable now |
| 419 | if err := stack.Start(); err != nil { |
| 420 | t.Fatalf("failed to start stack: %v", err) |
| 421 | } |
| 422 | defer stack.Stop() |
| 423 | |
| 424 | if err := stack.Service(&noopServ); err != nil { |
| 425 | t.Fatalf("noop service retrieval mismatch: have %v, want %v", err, nil) |
| 426 | } |
| 427 | if err := stack.Service(&instServ); err != nil { |
| 428 | t.Fatalf("instrumented service retrieval mismatch: have %v, want %v", err, nil) |
| 429 | } |
| 430 | } |
| 431 | |
| 432 | // Tests that all protocols defined by individual services get launched. |
| 433 | func TestProtocolGather(t *testing.T) { |