blob: 3e9e03e32e5aad869fd02fcfda0e990b78c898c7 [file] [log] [blame] [edit]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package rust_test_parser
import (
"testing"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"go.fuchsia.dev/fuchsia/tools/testing/runtests"
)
func testCaseCmp(t *testing.T, stdout string, want []runtests.TestCaseResult) {
r := Parse([]byte(stdout))
if diff := cmp.Diff(want, r, cmpopts.SortSlices(func(a, b runtests.TestCaseResult) bool { return a.DisplayName < b.DisplayName })); diff != "" {
t.Errorf("Found mismatch in %s (-want +got):\n%s", stdout, diff)
}
}
func TestParseEmpty(t *testing.T) {
testCaseCmp(t, "", []runtests.TestCaseResult{})
}
// If no test cases can be parsed, the output should be an empty slice, not a
// nil slice, so it gets serialized as an empty JSON array instead of as null.
func TestParseNoTestCases(t *testing.T) {
testCaseCmp(t, "non-test output", []runtests.TestCaseResult{})
}
func TestParseRust(t *testing.T) {
stdout := `
running 3 tests
test tests::ignored_test ... ignored
[stdout - legacy_test]
test tests::test_add_hundred ... ok
[stdout - legacy_test]
test tests::test_add ... FAILED
[stdout - legacy_test]
test tests::test_substract ... FAILED
[stdout - legacy_test]
[stdout - legacy_test]
failures:
[stdout - legacy_test]
[stdout - legacy_test]
---- tests::test_add_hundred stdout ----
[stdout - legacy_test]
---- tests::test_add_hundred stderr ----
[stdout - legacy_test]
booooo I printed an error, but it doesn't count as fail reason
---- tests::test_add stdout ----
[stdout - legacy_test]
---- tests::test_add stderr ----
[stdout - legacy_test]
thread 'main' panicked at ../../src/lib/zircon/rust/src/channel.rs:761:9:
[stdout - legacy_test]
assertion failed: ` + "`(left != right)`" + `
[stdout - legacy_test]
left: ` + "`ObjectType(PORT)`" + `,
[stdout - legacy_test]
right: ` + "`ObjectType(PORT)`" + `
[stdout - legacy_test]
stack backtrace:
[stdout - legacy_test]
{{{reset}}}
[stdout - legacy_test]
{{{module:0x0::elf:cb02c721da2e5287}}}
[stdout - legacy_test]
{{{mmap:0x2de1be9a000:0x11a5c:load:0x0:r:0x0}}}
[stdout - legacy_test]
[stdout - legacy_test]
---- tests::test_substract stdout ----
[stdout - legacy_test]
---- tests::test_substract stderr ----
[stdout - legacy_test]
thread 'main' panicked at ../../src/lib/zircon/rust/src/channel.rs:783:9:
[stdout - legacy_test]
assertion failed: ` + "`(left != right)`" + `
[stdout - legacy_test]
left: ` + "`Err((5, 0))`" + `,
[stdout - legacy_test]
right: ` + "`Err((5, 0))`" + `
[stdout - legacy_test]
stack backtrace:
[stdout - legacy_test]
{{{reset}}}
[stdout - legacy_test]
{{{module:0x0::elf:cb02c721da2e5287}}}
[stdout - legacy_test]
{{{mmap:0x3441843f000:0x11a5c:load:0x0:r:0x0}}}
[stdout - legacy_test]
{{{mmap:0x34418451000:0x18f90:load:0x0:rx:0x12000}}}
[stdout - legacy_test]
failures:
[stdout - legacy_test]
test tests::test_add
[stdout - legacy_test]
test tests::test_substract
[stdout - legacy_test]
[stdout - legacy_test]
test result: FAILED. 1 passed; 2 failed; 1 ignored; 0 measured; 0 filtered out; finished in 5.30s
[stdout - legacy_test]
[FAILED] legacy_test
Failed tests: legacy_test
0 out of 1 tests passed...
fuchsia-pkg://fuchsia.com/fuchsiatests#meta/some-tests.cm completed with result: FAILED
One or more test runs failed.`
want := []runtests.TestCaseResult{
{
DisplayName: "tests::ignored_test",
SuiteName: "tests",
CaseName: "ignored_test",
Status: runtests.TestSkipped,
Format: "Rust",
}, {
DisplayName: "tests::test_add_hundred",
SuiteName: "tests",
CaseName: "test_add_hundred",
Status: runtests.TestSuccess,
Format: "Rust",
}, {
DisplayName: "tests::test_add",
SuiteName: "tests",
CaseName: "test_add",
Status: runtests.TestFailure,
Format: "Rust",
FailReason: "thread 'main' panicked at ../../src/lib/zircon/rust/src/channel.rs:761:9:\nassertion failed: `(left != right)`\n left: `ObjectType(PORT)`,\n right: `ObjectType(PORT)`",
}, {
DisplayName: "tests::test_substract",
SuiteName: "tests",
CaseName: "test_substract",
Status: runtests.TestFailure,
Format: "Rust",
FailReason: "thread 'main' panicked at ../../src/lib/zircon/rust/src/channel.rs:783:9:\nassertion failed: `(left != right)`\n left: `Err((5, 0))`,\n right: `Err((5, 0))`",
},
}
testCaseCmp(t, stdout, want)
}
// Regression test for https://fxbug.dev/42129657
func TestFxb52363(t *testing.T) {
stdout := `
Running test in realm: test_env_25300c08
running 4 tests
test listen_for_klog ... ok
test listen_for_syslog ... ok
test listen_for_klog_routed_stdio ... ok
test test_observer_stop_api ... ok
test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
ok 61 fuchsia-pkg://fuchsia.com/archivist_integration_tests#meta/logs_integration_rust_tests.cm (1.04732004s)
`
want := []runtests.TestCaseResult{
{
DisplayName: "listen_for_klog",
CaseName: "listen_for_klog",
Status: runtests.TestSuccess,
Format: "Rust",
}, {
DisplayName: "listen_for_syslog",
CaseName: "listen_for_syslog",
Status: runtests.TestSuccess,
Format: "Rust",
}, {
DisplayName: "listen_for_klog_routed_stdio",
CaseName: "listen_for_klog_routed_stdio",
Status: runtests.TestSuccess,
Format: "Rust",
}, {
DisplayName: "test_observer_stop_api",
CaseName: "test_observer_stop_api",
Status: runtests.TestSuccess,
Format: "Rust",
},
}
testCaseCmp(t, stdout, want)
}