(t *testing.T)
| 124 | } |
| 125 | |
| 126 | func TestLogSender_LogLimitExceeded(t *testing.T) { |
| 127 | t.Parallel() |
| 128 | ctx := testutil.Context(t, testutil.WaitShort) |
| 129 | logger := testutil.Logger(t) |
| 130 | fDest := newFakeLogDest() |
| 131 | uut := NewLogSender(logger) |
| 132 | |
| 133 | t0 := dbtime.Now() |
| 134 | |
| 135 | ls1 := uuid.UUID{0x11} |
| 136 | uut.Enqueue(ls1, Log{ |
| 137 | CreatedAt: t0, |
| 138 | Output: "test log 0, src 1", |
| 139 | Level: codersdk.LogLevelInfo, |
| 140 | }) |
| 141 | |
| 142 | empty := make(chan error, 1) |
| 143 | go func() { |
| 144 | err := uut.WaitUntilEmpty(ctx) |
| 145 | empty <- err |
| 146 | }() |
| 147 | |
| 148 | loopErr := make(chan error, 1) |
| 149 | go func() { |
| 150 | err := uut.SendLoop(ctx, fDest) |
| 151 | loopErr <- err |
| 152 | }() |
| 153 | |
| 154 | req := testutil.TryReceive(ctx, t, fDest.reqs) |
| 155 | require.NotNil(t, req) |
| 156 | testutil.RequireSend(ctx, t, fDest.resps, |
| 157 | &proto.BatchCreateLogsResponse{LogLimitExceeded: true}) |
| 158 | |
| 159 | err := testutil.TryReceive(ctx, t, loopErr) |
| 160 | require.ErrorIs(t, err, ErrLogLimitExceeded) |
| 161 | |
| 162 | // Should also unblock WaitUntilEmpty |
| 163 | err = testutil.TryReceive(ctx, t, empty) |
| 164 | require.NoError(t, err) |
| 165 | |
| 166 | // we can still enqueue more logs after SendLoop returns, but they don't |
| 167 | // actually get enqueued |
| 168 | uut.Enqueue(ls1, Log{ |
| 169 | CreatedAt: t0, |
| 170 | Output: "test log 2, src 1", |
| 171 | Level: codersdk.LogLevelTrace, |
| 172 | }) |
| 173 | uut.L.Lock() |
| 174 | require.Len(t, uut.queues, 0) |
| 175 | uut.L.Unlock() |
| 176 | |
| 177 | // Also, if we run SendLoop again, it should immediately exit. |
| 178 | go func() { |
| 179 | err := uut.SendLoop(ctx, fDest) |
| 180 | loopErr <- err |
| 181 | }() |
| 182 | err = testutil.TryReceive(ctx, t, loopErr) |
| 183 | require.ErrorIs(t, err, ErrLogLimitExceeded) |
nothing calls this directly
no test coverage detected