Repository navigation
Expand file tree
/
Copy pathpreview.go
More file actions
83 lines (72 loc) · 2.53 KB
/
Copy pathpreview.go
File metadata and controls
83 lines (72 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package e2e
import (
"fmt"
"os"
"strings"
"testing"
"google.golang.org/grpc"
"go.ate.dev/substrate/internal/preview"
"github.com/spf13/pflag"
)
// previewFlag lists the preview gates the install under test enabled, in the
// same syntax as ate-setup's ATE_PREVIEW: comma- or space-separated gate
// names, or "ALL" for all of them. Empty means none.
var previewFlag string
// previewRequired reports whether --preview must be passed. A lane that
// forgets it would otherwise skip every preview test and still pass, so CI
// must declare its preview mode, even if only as empty.
func previewRequired() bool {
return os.Getenv("CI") == "true"
}
// previewGates returns the gates in value. set reports whether --preview was
// passed at all.
func previewGates(value string, set bool) ([]string, error) {
if !set && previewRequired() {
return nil, fmt.Errorf("--preview must be passed in CI (empty for no preview gates)")
}
return strings.FieldsFunc(value, func(r rune) bool {
return r == ',' || r == ' ' || r == '\t' || r == '\n'
}), nil
}
// initPreview sets the process-wide preview gates from --preview.
func initPreview() error {
gates, err := previewGates(previewFlag, pflag.CommandLine.Changed("preview"))
if err != nil {
return err
}
if err := preview.Init(gates...); err != nil {
return fmt.Errorf("--preview: %w", err)
}
return nil
}
// previewDialOptions returns the options for the ATE API client to opt in to
// preview features, if the install under test enabled any.
func previewDialOptions() []grpc.DialOption {
for _, enabled := range preview.AsMap() {
if enabled {
return preview.DialOptionsWithOptIn()
}
}
return nil
}
// RequirePreview skips t unless the install under test enabled gate. Tests of
// a preview feature call it first, so a run without the gate skips them.
func RequirePreview(t testing.TB, gate preview.Gate) {
t.Helper()
if !preview.IsEnabled(gate) {
t.Skipf("preview gate %q is not enabled (pass --preview)", gate)
}
}