Asserting Container Logs

Use built-in critical-level assertion (CRIT|PANIC|FATAL) for Chainlink node logs:

in, err := framework.Load[Cfg](t)
require.NoError(t, err)
t.Cleanup(func() {
	err := framework.SaveAndCheckLogs(t)
	require.NoError(t, err)
})

For custom checks, assert logs directly from streams with StreamCTFContainerLogsFanout.

re := regexp.MustCompile(`name=HeadReporter version=\d+`)
t.Cleanup(func() {
	err := framework.StreamCTFContainerLogsFanout(
		framework.LogStreamConsumer{
			Name: "custom-regex-assert",
			Consume: func(logStreams map[string]io.ReadCloser) error {
				for name, stream := range logStreams {
					scanner := bufio.NewScanner(stream)
					found := false
					for scanner.Scan() {
						if re.MatchString(scanner.Text()) {
							found = true
							break
						}
					}
					if err := scanner.Err(); err != nil {
						return fmt.Errorf("scan %s: %w", name, err)
					}
					if !found {
						return fmt.Errorf("missing HeadReporter log in %s", name)
					}
				}
				return nil
			},
		},
	)
	require.NoError(t, err)
})

Full example