online_test.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package online
  2. import (
  3. "github.com/gogf/gf/database/gredis"
  4. "reflect"
  5. "testing"
  6. "time"
  7. )
  8. var testid = "test"
  9. func checkOnlineStatus(t *testing.T, mgr *Manager, status Status) {
  10. readstatus, err := mgr.GetStatus(testid)
  11. if err != nil {
  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 {
  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(gredis.Config{
  32. Host: "127.0.0.1",
  33. Port: 6379,
  34. Db: 1,
  35. })
  36. status := Status{
  37. ClientIP: "3.3.3.3",
  38. AccessRPCHost: "192.168.9.1:20030",
  39. HeartbeatInterval: 2,
  40. }
  41. err := mgr.GetOnline(testid, status)
  42. if err != nil {
  43. t.Error(err)
  44. }
  45. checkOnlineStatus(t, mgr, status)
  46. cnt := 0
  47. for {
  48. time.Sleep(time.Second * 2)
  49. if cnt > 2 {
  50. break
  51. }
  52. err := mgr.SetHeartbeat(testid)
  53. if err != nil {
  54. t.Error(err)
  55. }
  56. cnt++
  57. }
  58. checkOnlineStatus(t, mgr, status)
  59. err = mgr.GetOffline(testid)
  60. if err != nil {
  61. t.Error(err)
  62. }
  63. checkOfflineStatus(t, mgr)
  64. }