|
1 | 1 | package tests |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "context" |
5 | | - "io" |
6 | | - "log/slog" |
7 | | - "net/http" |
8 | | - "os" |
9 | | - "os/signal" |
10 | | - "sync" |
11 | | - "syscall" |
12 | | - "testing" |
13 | | - "time" |
14 | | - |
15 | | - "github.com/roadrunner-server/config/v5" |
16 | | - "github.com/roadrunner-server/endure/v2" |
17 | | - "github.com/roadrunner-server/logger/v5" |
18 | | - "github.com/roadrunner-server/server/v5" |
19 | | - "github.com/roadrunner-server/status/v5" |
20 | | - "github.com/stretchr/testify/require" |
21 | | - rrtemporal "github.com/temporalio/roadrunner-temporal/v5" |
22 | | - |
23 | | - "github.com/stretchr/testify/assert" |
| 4 | + "context" |
| 5 | + "io" |
| 6 | + "log/slog" |
| 7 | + "net/http" |
| 8 | + "os" |
| 9 | + "os/signal" |
| 10 | + "sync" |
| 11 | + "syscall" |
| 12 | + "testing" |
| 13 | + "time" |
| 14 | + |
| 15 | + "github.com/roadrunner-server/config/v5" |
| 16 | + "github.com/roadrunner-server/endure/v2" |
| 17 | + "github.com/roadrunner-server/logger/v5" |
| 18 | + "github.com/roadrunner-server/server/v5" |
| 19 | + "github.com/roadrunner-server/status/v5" |
| 20 | + "github.com/stretchr/testify/require" |
| 21 | + rrtemporal "github.com/temporalio/roadrunner-temporal/v5" |
| 22 | + |
| 23 | + "github.com/stretchr/testify/assert" |
24 | 24 | ) |
25 | 25 |
|
26 | 26 | func TestTemporalCheckStatus(t *testing.T) { |
27 | | - cont := endure.New(slog.LevelDebug) |
28 | | - |
29 | | - cfg := &config.Plugin{ |
30 | | - Version: "2023.3.0", |
31 | | - Path: "../configs/.rr-status.yaml", |
32 | | - } |
33 | | - |
34 | | - err := cont.RegisterAll( |
35 | | - cfg, |
36 | | - &status.Plugin{}, |
37 | | - &logger.Plugin{}, |
38 | | - &rrtemporal.Plugin{}, |
39 | | - &server.Plugin{}, |
40 | | - ) |
41 | | - assert.NoError(t, err) |
42 | | - |
43 | | - err = cont.Init() |
44 | | - if err != nil { |
45 | | - t.Fatal(err) |
46 | | - } |
47 | | - |
48 | | - ch, err := cont.Serve() |
49 | | - assert.NoError(t, err) |
50 | | - |
51 | | - sig := make(chan os.Signal, 1) |
52 | | - signal.Notify(sig, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) |
53 | | - |
54 | | - wg := &sync.WaitGroup{} |
55 | | - wg.Add(1) |
56 | | - |
57 | | - stopCh := make(chan struct{}, 1) |
58 | | - |
59 | | - go func() { |
60 | | - defer wg.Done() |
61 | | - for { |
62 | | - select { |
63 | | - case e := <-ch: |
64 | | - assert.Fail(t, "error", e.Error.Error()) |
65 | | - err = cont.Stop() |
66 | | - if err != nil { |
67 | | - assert.FailNow(t, "error", err.Error()) |
68 | | - } |
69 | | - case <-sig: |
70 | | - err = cont.Stop() |
71 | | - if err != nil { |
72 | | - assert.FailNow(t, "error", err.Error()) |
73 | | - } |
74 | | - return |
75 | | - case <-stopCh: |
76 | | - err = cont.Stop() |
77 | | - if err != nil { |
78 | | - assert.FailNow(t, "error", err.Error()) |
79 | | - } |
80 | | - return |
81 | | - } |
82 | | - } |
83 | | - }() |
84 | | - |
85 | | - time.Sleep(time.Second) |
86 | | - |
87 | | - client := &http.Client{ |
88 | | - Timeout: time.Second * 10, |
89 | | - } |
90 | | - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://127.0.0.1:35544/health?plugin=temporal", nil) |
91 | | - require.NoError(t, err) |
92 | | - |
93 | | - resp, err := client.Do(req) |
94 | | - require.NoError(t, err) |
95 | | - require.NotNil(t, resp) |
96 | | - |
97 | | - body, _ := io.ReadAll(resp.Body) |
98 | | - assert.Equal(t, "[{\"plugin_name\":\"temporal\",\"error_message\":\"\",\"status_code\":200}]", string(body)) |
99 | | - assert.Equal(t, http.StatusOK, resp.StatusCode) |
100 | | - _ = resp.Body.Close() |
101 | | - |
102 | | - req, err = http.NewRequestWithContext(context.Background(), http.MethodGet, "http://127.0.0.1:35544/ready?plugin=temporal", nil) |
103 | | - require.NoError(t, err) |
104 | | - |
105 | | - resp, err = client.Do(req) |
106 | | - require.NoError(t, err) |
107 | | - require.NotNil(t, resp) |
108 | | - |
109 | | - body, _ = io.ReadAll(resp.Body) |
110 | | - assert.Equal(t, "[{\"plugin_name\":\"temporal\",\"error_message\":\"\",\"status_code\":200}]", string(body)) |
111 | | - assert.Equal(t, http.StatusOK, resp.StatusCode) |
112 | | - _ = resp.Body.Close() |
113 | | - |
114 | | - stopCh <- struct{}{} |
115 | | - |
116 | | - wg.Wait() |
| 27 | + cont := endure.New(slog.LevelDebug) |
| 28 | + |
| 29 | + cfg := &config.Plugin{ |
| 30 | + Version: "2023.3.0", |
| 31 | + Path: "../configs/.rr-status.yaml", |
| 32 | + } |
| 33 | + |
| 34 | + err := cont.RegisterAll( |
| 35 | + cfg, |
| 36 | + &status.Plugin{}, |
| 37 | + &logger.Plugin{}, |
| 38 | + &rrtemporal.Plugin{}, |
| 39 | + &server.Plugin{}, |
| 40 | + ) |
| 41 | + assert.NoError(t, err) |
| 42 | + |
| 43 | + err = cont.Init() |
| 44 | + if err != nil { |
| 45 | + t.Fatal(err) |
| 46 | + } |
| 47 | + |
| 48 | + ch, err := cont.Serve() |
| 49 | + assert.NoError(t, err) |
| 50 | + |
| 51 | + sig := make(chan os.Signal, 1) |
| 52 | + signal.Notify(sig, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) |
| 53 | + |
| 54 | + wg := &sync.WaitGroup{} |
| 55 | + wg.Add(1) |
| 56 | + |
| 57 | + stopCh := make(chan struct{}, 1) |
| 58 | + |
| 59 | + go func() { |
| 60 | + defer wg.Done() |
| 61 | + for { |
| 62 | + select { |
| 63 | + case e := <-ch: |
| 64 | + assert.Fail(t, "error", e.Error.Error()) |
| 65 | + err = cont.Stop() |
| 66 | + if err != nil { |
| 67 | + assert.FailNow(t, "error", err.Error()) |
| 68 | + } |
| 69 | + case <-sig: |
| 70 | + err = cont.Stop() |
| 71 | + if err != nil { |
| 72 | + assert.FailNow(t, "error", err.Error()) |
| 73 | + } |
| 74 | + return |
| 75 | + case <-stopCh: |
| 76 | + err = cont.Stop() |
| 77 | + if err != nil { |
| 78 | + assert.FailNow(t, "error", err.Error()) |
| 79 | + } |
| 80 | + return |
| 81 | + } |
| 82 | + } |
| 83 | + }() |
| 84 | + |
| 85 | + time.Sleep(time.Second) |
| 86 | + |
| 87 | + client := &http.Client{ |
| 88 | + Timeout: time.Second * 10, |
| 89 | + } |
| 90 | + req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://127.0.0.1:35544/health?plugin=temporal", nil) |
| 91 | + require.NoError(t, err) |
| 92 | + |
| 93 | + resp, err := client.Do(req) |
| 94 | + require.NoError(t, err) |
| 95 | + require.NotNil(t, resp) |
| 96 | + |
| 97 | + body, _ := io.ReadAll(resp.Body) |
| 98 | + assert.Equal(t, "[{\"plugin_name\":\"temporal\",\"error_message\":\"\",\"status_code\":200}]", string(body)) |
| 99 | + assert.Equal(t, http.StatusOK, resp.StatusCode) |
| 100 | + _ = resp.Body.Close() |
| 101 | + |
| 102 | + req, err = http.NewRequestWithContext(context.Background(), http.MethodGet, "http://127.0.0.1:35544/ready?plugin=temporal", nil) |
| 103 | + require.NoError(t, err) |
| 104 | + |
| 105 | + resp, err = client.Do(req) |
| 106 | + require.NoError(t, err) |
| 107 | + require.NotNil(t, resp) |
| 108 | + |
| 109 | + body, _ = io.ReadAll(resp.Body) |
| 110 | + assert.Equal(t, "[{\"plugin_name\":\"temporal\",\"error_message\":\"\",\"status_code\":200}]", string(body)) |
| 111 | + assert.Equal(t, http.StatusOK, resp.StatusCode) |
| 112 | + _ = resp.Body.Close() |
| 113 | + |
| 114 | + stopCh <- struct{}{} |
| 115 | + |
| 116 | + wg.Wait() |
117 | 117 | } |
0 commit comments