online_test.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package online
  2. import (
  3. "github.com/garyburd/redigo/redis"
  4. "reflect"
  5. "testing"
  6. "time"
  7. )
  8. var testid = uint64(100)
  9. func checkOnlineStatus(t *testing.T, mgr *Manager, status Status) {
  10. readstatus, err := mgr.GetStatus(testid)
  11. if err != nil && err != redis.ErrNil {
  12. t.Error(err)
  13. }
  14. if readstatus == nil {
  15. t.Errorf("device should be online, but is offline.")
  16. }
  17. if !reflect.DeepEqual(status, *readstatus) {
  18. t.Errorf("get status test error, want %v, got %v", status, *readstatus)
  19. }
  20. }
  21. func checkOfflineStatus(t *testing.T, mgr *Manager) {
  22. readstatus, err := mgr.GetStatus(testid)
  23. if err != nil && err != redis.ErrNil {
  24. t.Error(err)
  25. }
  26. if readstatus != nil {
  27. t.Errorf("device should be offline, but got status: %v", readstatus)
  28. }
  29. }
  30. func TestManager(t *testing.T) {
  31. mgr := NewManager("localhost:6379")
  32. status := Status{
  33. ClientIP: "3.3.3.3",
  34. AccessRPCHost: "192.168.9.1:20030",
  35. HeartbeatInterval: 2,
  36. }
  37. err := mgr.GetOnline(testid, status)
  38. if err != nil {
  39. t.Error(err)
  40. }
  41. checkOnlineStatus(t, mgr, status)
  42. cnt := 0
  43. for {
  44. time.Sleep(time.Second * 2)
  45. if cnt > 2 {
  46. break
  47. }
  48. err := mgr.SetHeartbeat(testid)
  49. if err != nil {
  50. t.Error(err)
  51. }
  52. cnt++
  53. }
  54. checkOnlineStatus(t, mgr, status)
  55. err = mgr.GetOffline(testid)
  56. if err != nil {
  57. t.Error(err)
  58. }
  59. checkOfflineStatus(t, mgr)
  60. }