9
"github.com/pkg/errors"
10
"github.com/sirupsen/logrus"
11
"gitlab.systems-fd.com/packages/golang/helpers/h"
14
func Test_multiServiceServer_Run(t *testing.T) {
16
services map[string]ServiceInterface
17
servicesComplete map[string]bool
18
serviceStopFunc *h.SyncValueStruct[context.CancelFunc]
19
servicesIsWorkMx *sync.Mutex
29
name: "Тестирование отсутствия ошибки, если сервис ее не возвращает",
31
services: map[string]ServiceInterface{
32
"test-1": &serviceMock{
34
ShutdownIsCalled: false,
38
"test-2": &serviceMock{
40
ShutdownIsCalled: false,
45
servicesComplete: map[string]bool{},
46
serviceStopFunc: h.SyncValue[context.CancelFunc](func() {}),
47
servicesIsWorkMx: &sync.Mutex{},
48
logger: logrus.WithField("prefix", `test`),
54
name: "Тестирование наличия ошибки, если сервис ее возвращает",
56
services: map[string]ServiceInterface{
57
"test-1": &serviceMock{
59
ShutdownIsCalled: false,
60
RunResult: errors.New("Test error"),
63
"test-2": &serviceMock{
65
ShutdownIsCalled: false,
70
servicesComplete: map[string]bool{},
71
serviceStopFunc: h.SyncValue[context.CancelFunc](func() {}),
72
servicesIsWorkMx: &sync.Mutex{},
73
logger: logrus.WithField("prefix", `test`),
79
for _, tt := range tests {
80
t.Run(tt.name, func(t *testing.T) {
81
m := &multiServiceServer{
82
services: tt.fields.services,
83
servicesComplete: tt.fields.servicesComplete,
84
serviceStopFunc: tt.fields.serviceStopFunc,
85
servicesIsWorkMx: tt.fields.servicesIsWorkMx,
86
isServicesRun: h.SyncValue[bool](false),
87
isShutdownInProgress: h.SyncValue[bool](false),
88
logger: tt.fields.logger,
90
if err := m.Run(); (err != nil) != tt.wantErr {
91
t.Errorf("Run() error = %v, wantErr %v", err, tt.wantErr)
94
for _, s := range tt.fields.services {
95
if service, ok := s.(*serviceMock); ok {
96
if service.RunIsCalled != tt.isRunCalled {
97
t.Errorf("Run() isRunCalled = %v, want %v", service.RunIsCalled, tt.isRunCalled)
105
func Test_multiServiceServer_IsServicesRun(t *testing.T) {
107
services map[string]ServiceInterface
108
servicesComplete map[string]bool
109
serviceStopFunc *h.SyncValueStruct[context.CancelFunc]
110
servicesIsWorkMx *sync.Mutex
118
name: "Тестирование правильности возвращения результата проверки статуса запуска",
120
services: map[string]ServiceInterface{
121
"test-1": &serviceMock{
123
ShutdownIsCalled: false,
127
"test-2": &serviceMock{
129
ShutdownIsCalled: false,
133
"test-3": &serviceMock{
135
ShutdownIsCalled: false,
140
servicesComplete: map[string]bool{},
141
serviceStopFunc: h.SyncValue[context.CancelFunc](func() {}),
142
servicesIsWorkMx: &sync.Mutex{},
143
logger: logrus.WithField("prefix", `test`),
147
for _, tt := range tests {
148
t.Run(tt.name, func(t *testing.T) {
149
m := &multiServiceServer{
150
services: tt.fields.services,
151
servicesComplete: tt.fields.servicesComplete,
152
serviceStopFunc: tt.fields.serviceStopFunc,
153
servicesIsWorkMx: tt.fields.servicesIsWorkMx,
154
isServicesRun: h.SyncValue[bool](false),
155
isShutdownInProgress: h.SyncValue[bool](false),
156
logger: tt.fields.logger,
159
testServices := func(flagStatus bool) {
160
if flagStatus != m.IsServicesRun() {
161
t.Errorf("IsServicesRun() flag = %v, want %v", m.IsServicesRun(), flagStatus)
172
time.Sleep(300 * time.Millisecond)
179
func Test_multiServiceServer_IsServicesAlive(t *testing.T) {
181
services map[string]ServiceInterface
182
servicesComplete map[string]bool
183
serviceStopFunc *h.SyncValueStruct[context.CancelFunc]
184
servicesIsWorkMx *sync.Mutex
192
name: "Тестирование правильности возвращения результата проверки статуса рабочести",
194
services: map[string]ServiceInterface{
195
"test-1": &serviceMock{
197
ShutdownIsCalled: false,
201
"test-2": &serviceMock{
203
ShutdownIsCalled: false,
207
"test-3": &serviceMock{
209
ShutdownIsCalled: false,
214
servicesComplete: map[string]bool{},
215
serviceStopFunc: h.SyncValue[context.CancelFunc](func() {}),
216
servicesIsWorkMx: &sync.Mutex{},
217
logger: logrus.WithField("prefix", `test`),
221
for _, tt := range tests {
222
t.Run(tt.name, func(t *testing.T) {
223
m := &multiServiceServer{
224
services: tt.fields.services,
225
servicesComplete: tt.fields.servicesComplete,
226
serviceStopFunc: tt.fields.serviceStopFunc,
227
servicesIsWorkMx: tt.fields.servicesIsWorkMx,
228
isServicesRun: h.SyncValue[bool](false),
229
isShutdownInProgress: h.SyncValue[bool](false),
230
logger: tt.fields.logger,
233
testServices := func(flagStatus bool) {
234
if flagStatus != m.IsServicesAlive() {
235
t.Errorf("IsServicesAlive() flag = %v, want %v", m.IsServicesAlive(), flagStatus)
242
time.Sleep(100 * time.Millisecond)
248
time.Sleep(300 * time.Millisecond)
255
func Test_multiServiceServer_Stop(t *testing.T) {
257
services map[string]ServiceInterface
258
servicesComplete map[string]bool
259
serviceStopFunc *h.SyncValueStruct[context.CancelFunc]
260
servicesIsWorkMx *sync.Mutex
267
isShutdownCalled bool
270
name: "Тестирование правильности работы остановки сервиса",
272
services: map[string]ServiceInterface{
273
"test-1": &serviceMock{
275
ShutdownIsCalled: false,
279
"test-2": &serviceMock{
281
ShutdownIsCalled: false,
285
"test-3": &serviceMock{
287
ShutdownIsCalled: false,
292
servicesComplete: map[string]bool{},
293
serviceStopFunc: h.SyncValue[context.CancelFunc](func() {}),
294
servicesIsWorkMx: &sync.Mutex{},
295
logger: logrus.WithField("prefix", `test`),
298
isShutdownCalled: false,
301
name: "Тестирование правильности работы остановки сервиса",
303
services: map[string]ServiceInterface{
304
"test-1": &serviceMock{
306
ShutdownIsCalled: false,
310
"test-2": &serviceMock{
312
ShutdownIsCalled: false,
316
"test-3": &serviceMock{
318
ShutdownIsCalled: false,
323
servicesComplete: map[string]bool{},
324
serviceStopFunc: h.SyncValue[context.CancelFunc](func() {}),
325
servicesIsWorkMx: &sync.Mutex{},
326
logger: logrus.WithField("prefix", `test`),
329
isShutdownCalled: true,
332
for _, tt := range tests {
333
t.Run(tt.name, func(t *testing.T) {
334
m := &multiServiceServer{
335
services: tt.fields.services,
336
servicesComplete: tt.fields.servicesComplete,
337
serviceStopFunc: tt.fields.serviceStopFunc,
338
servicesIsWorkMx: tt.fields.servicesIsWorkMx,
339
isServicesRun: h.SyncValue[bool](false),
340
isShutdownInProgress: h.SyncValue[bool](false),
341
logger: tt.fields.logger,
345
time.Sleep(time.Duration(tt.fields.wait) * time.Millisecond)
352
for _, s := range tt.fields.services {
353
if service, ok := s.(*serviceMock); ok {
354
if service.ShutdownIsCalled != tt.isShutdownCalled {
355
t.Errorf("Stop() isShutdownCalled = %v, want %v", service.ShutdownIsCalled, tt.isShutdownCalled)