MCPcopy Index your code
hub / github.com/tsuru/tsuru / TestAddLogsHandlerConcurrent

Method TestAddLogsHandlerConcurrent

api/log_test.go:122–186  ·  view source on GitHub ↗
(c *check.C)

Source from the content-addressed store, hash-verified

120}
121
122func (s *S) TestAddLogsHandlerConcurrent(c *check.C) {
123 s.mockService.Team.OnList = func() ([]authTypes.Team, error) {
124 return []authTypes.Team{{Name: s.team.Name}}, nil
125 }
126 a1 := appTypes.App{Name: "myapp1", Platform: "zend", TeamOwner: s.team.Name}
127 err := app.CreateApp(context.TODO(), &a1, s.user)
128 c.Assert(err, check.IsNil)
129 a2 := appTypes.App{Name: "myapp2", Platform: "zend", TeamOwner: s.team.Name}
130 err = app.CreateApp(context.TODO(), &a2, s.user)
131 c.Assert(err, check.IsNil)
132 baseTime, err := time.Parse(time.RFC3339, "2015-06-16T15:00:00.000Z")
133 c.Assert(err, check.IsNil)
134 baseTime = baseTime.Local()
135 bodyPart := `
136 {"date": "2015-06-16T15:00:00.000Z", "message": "msg1", "source": "web", "name": "myapp1", "unit": "unit1"}
137 {"date": "2015-06-16T15:00:01.000Z", "message": "msg2", "source": "web", "name": "myapp2", "unit": "unit2"}
138 `
139 srv := httptest.NewServer(s.testServer)
140 defer srv.Close()
141 testServerURL, err := url.Parse(srv.URL)
142 c.Assert(err, check.IsNil)
143 wsURL := fmt.Sprintf("ws://%s/logs", testServerURL.Host)
144 wg := sync.WaitGroup{}
145 nConcurrency := 100
146 for i := 0; i < 100; i++ {
147 wg.Add(1)
148 go func() {
149 defer wg.Done()
150 config, wsErr := websocket.NewConfig(wsURL, "ws://localhost/")
151 c.Assert(wsErr, check.IsNil)
152 config.Header.Set("Authorization", "bearer "+s.token.GetValue())
153 wsConn, wsErr := websocket.DialConfig(config)
154 c.Assert(wsErr, check.IsNil)
155 defer wsConn.Close()
156 _, wsErr = wsConn.Write([]byte(bodyPart))
157 c.Assert(wsErr, check.IsNil)
158 }()
159 }
160 wg.Wait()
161 timeout := time.After(5 * time.Second)
162loop:
163 for {
164 var logs1 []appTypes.Applog
165 logs1, err = app.LastLogs(context.TODO(), &a1, servicemanager.LogService, appTypes.ListLogArgs{
166 Limit: nConcurrency,
167 })
168 c.Assert(err, check.IsNil)
169 if len(logs1) == nConcurrency {
170 break
171 }
172 select {
173 case <-timeout:
174 c.Fatal("timeout waiting for logs")
175 break loop
176 default:
177 }
178 }
179 logs, err := app.LastLogs(context.TODO(), &a1, servicemanager.LogService, appTypes.ListLogArgs{

Callers

nothing calls this directly

Calls 9

compareLogsFunction · 0.85
DoneMethod · 0.80
WaitMethod · 0.80
CloseMethod · 0.65
AddMethod · 0.65
SetMethod · 0.65
GetValueMethod · 0.65
FatalMethod · 0.65
WriteMethod · 0.45

Tested by

no test coverage detected