blob: 771e02fefc52a42292e883df72be832445137f14 [file] [log] [blame]
Serge Bazanskiac6b6442020-05-06 19:13:43 +02001// Copyright 2020 The Monogon Project Authors.
2//
3// SPDX-License-Identifier: Apache-2.0
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16
17package supervisor
18
19import (
20 "context"
21 "testing"
22)
23
24// waitSettle waits until the supervisor reaches a 'settled' state - ie., one
25// where no actions have been performed for a number of GC cycles.
26// This is used in tests only.
27func (s *supervisor) waitSettle(ctx context.Context) error {
28 waiter := make(chan struct{})
29 s.pReq <- &processorRequest{
30 waitSettled: &processorRequestWaitSettled{
31 waiter: waiter,
32 },
33 }
34
35 select {
36 case <-ctx.Done():
37 return ctx.Err()
38 case <-waiter:
39 return nil
40 }
41}
42
43// waitSettleError wraps waitSettle to fail a test if an error occurs, eg. the
44// context is canceled.
45func (s *supervisor) waitSettleError(ctx context.Context, t *testing.T) {
46 err := s.waitSettle(ctx)
47 if err != nil {
48 t.Fatalf("waitSettle: %v", err)
49 }
50}