github.com/Laplace-Game-Development/Laplace-Entangled-Environment@v0.0.3/internal/schedule/schedule_test.go (about) 1 package schedule 2 3 import ( 4 "flag" 5 "fmt" 6 "math/rand" 7 "os" 8 "testing" 9 10 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/event" 11 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/redis" 12 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/startup" 13 "github.com/Laplace-Game-Development/Laplace-Entangled-Environment/internal/zeromq" 14 "github.com/mediocregopher/radix/v3" 15 "github.com/pebbe/zmq4" 16 ) 17 18 //// Configurables 19 const eventHealthRecNum int = 10 20 21 var ( 22 cwd_arg = flag.String("cwd", "", "set cwd") 23 ) 24 25 func TestMain(m *testing.M) { 26 flag.Parse() 27 if *cwd_arg != "" { 28 if err := os.Chdir(*cwd_arg); err != nil { 29 fmt.Println("Chdir error:", err) 30 } 31 } 32 33 os.Exit(m.Run()) 34 } 35 36 func TestStartupAndCleanup(t *testing.T) { 37 cleanup, err := StartCronScheduler() 38 if err != nil { 39 t.Errorf("Error occurred in starting Cron Scheduler! Err: %v\n", err) 40 } 41 cleanup() 42 } 43 44 func TestEventHealthCheck(t *testing.T) { 45 cleanup := startup.InitServerStartupOnTaskList( 46 []startup.ServerTask{ 47 redis.StartDatabase, 48 zeromq.StartZeroMqComms, 49 }) 50 defer cleanup() 51 52 // Empty Queue Should Return 53 eventCheckHealth() 54 55 // Publish some records 56 nums := make([]int64, eventHealthRecNum) 57 cmds := make([]radix.CmdAction, eventHealthRecNum) 58 check := map[string]bool{} 59 60 for i := 0; i < eventHealthRecNum; i++ { 61 nums[i] = rand.Int63() 62 cmds[i] = radix.Cmd(nil, "LPUSH", event.HealthTaskQueue, fmt.Sprintf("%d", nums[i])) 63 check[fmt.Sprintf("%d", nums[i])] = false 64 } 65 66 err := redis.MainRedis.Do(radix.Pipeline(cmds...)) 67 if err != nil { 68 t.Errorf("Error occurred in sendin records to Redis! Err: %v\n", err) 69 } 70 71 // Receive Records via Zeromq 72 zmqREP, err := zeromq.MainZeroMQ.NewSocket(zmq4.Type(zmq4.REP)) 73 if err != nil { 74 t.Errorf("Error occured creating zeromq socket! Err: %v\n", err) 75 } 76 77 zmqREP.Bind(zeromq.ZeromqMask + ProxyFEPort) 78 79 go eventCheckHealth() 80 81 var msg string 82 var args []string 83 var exists bool 84 var value bool 85 for i := 0; i < eventHealthRecNum; i++ { 86 t.Log("Waiting For Message") 87 msg, err = zmqREP.Recv(zmq4.Flag(0)) 88 for msg == "" { 89 msg, err = zmqREP.Recv(zmq4.Flag(0)) 90 } 91 t.Logf("Got Message: %s\n", msg) 92 93 t.Logf("Sending Confirmation!\n") 94 zmqREP.Send("OK", zmq4.Flag(0)) 95 96 _, args = parseTask(msg) 97 if len(args) == 0 { 98 t.Errorf("Message was illformatted: %s\n", msg) 99 } 100 101 value, exists = check[args[0]] 102 if !exists { 103 t.Errorf("Got a GameID that did not exist! Msg: %s\n", msg) 104 } else if value { 105 t.Errorf("Got a repeated GameID! Msg: %s\n", msg) 106 } else { 107 t.Logf("Message Looks Unique!\n") 108 } 109 110 check[args[0]] = true 111 } 112 113 // Do it once more to verify no errors or problems 114 eventCheckHealth() 115 116 // Not Closing Here Seemed to cause a leak... 117 zmqREP.Close() 118 }