integration_tests: Simple backwards compatibility test

The goal is to detect (possibly backwards imcompatible) changes to the
virtual hardware exposed to guests. To start with, it only checks the
PCI devices.

Example failure output when the iommu is removed:

    thread 'backcompat_test_simple_lspci' panicked at 'assertion failed: `(left == right)`
      left: `"00:00.0 0600: 8086:1237\n00:01.0 00ff: 1af4:1057 (rev 01)\n00:02.0 00ff: 1af4:1042 (rev 01)\n00:03.0 00ff: 1af4:1044 (rev 01)\n00:04.0 00ff: 1af4:1045 (rev 01)\n00:05.0 0c03: 1b73
    :1000\n00:06.0 ffff: 1b36:0011 (rev 01)\n00:07.0 0604: 8086:3420"`,
     right: `"00:00.0 0600: 8086:1237\n00:01.0 00ff: 1af4:1042 (rev 01)\n00:02.0 00ff: 1af4:1044 (rev 01)\n00:03.0 00ff: 1af4:1045 (rev 01)\n00:04.0 0c03: 1b73:1000\n00:05.0 ffff: 1b36:0011 (re
    v 01)\n00:06.0 0604: 8086:3420"`: PCI Devices changed:
    <<< Expected <<<
    00:00.0 0600: 8086:1237
    00:01.0 00ff: 1af4:1057 (rev 01)
    00:02.0 00ff: 1af4:1042 (rev 01)
    00:03.0 00ff: 1af4:1044 (rev 01)
    00:04.0 00ff: 1af4:1045 (rev 01)
    00:05.0 0c03: 1b73:1000
    00:06.0 ffff: 1b36:0011 (rev 01)
    00:07.0 0604: 8086:3420
    <<<<<<<<<<<<<<<<
    >>> Got      >>>
    00:00.0 0600: 8086:1237
    00:01.0 00ff: 1af4:1042 (rev 01)
    00:02.0 00ff: 1af4:1044 (rev 01)
    00:03.0 00ff: 1af4:1045 (rev 01)
    00:04.0 0c03: 1b73:1000
    00:05.0 ffff: 1b36:0011 (rev 01)
    00:06.0 0604: 8086:3420
    >>>>>>>>>>>>>>>>
    ', integration_tests/tests/backcompat.rs:21:5

    ... vm serial output ...

`pub mod` is used to avoid deadcode warnings. Changed boot.rs to do the
same for consistency and future proofing.

BUG=b:231365736
TEST=./integration_tests/run

Change-Id: Ia33d6631e3385ce3633cadff552a6253bb486f93
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/3795888
Auto-Submit: Frederick Mayle <fmayle@google.com>
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-by: David Stevens <stevensd@chromium.org>
Reviewed-by: Dennis Kempin <denniskempin@google.com>
Commit-Queue: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: Frederick Mayle <fmayle@google.com>
This commit is contained in:
Frederick Mayle 2022-07-30 00:56:36 +00:00 committed by crosvm LUCI
parent 4773b4db77
commit bc927456ad
3 changed files with 39 additions and 1 deletions

View file

@ -0,0 +1,31 @@
// Copyright 2022 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
pub mod fixture;
use fixture::Config;
use fixture::TestVm;
// Tests for possible backwards compatibility issues.
//
// There is no backwards compatibility policy yet, these are just "change detector" tests. If you
// break a test, make sure the change is intended and then ask in go/crosvm-chat to see if anyone
// objects to updating the golden file.
// Many changes to PCI devices can cause issues, e.g. some users depend on crosvm always choosing
// the same PCI slots for particular devices.
#[test]
fn backcompat_test_simple_lspci() {
let mut vm = TestVm::new(Config::new()).unwrap();
let expected = include_str!("goldens/backcompat_test_simple_lspci.txt").trim();
let result = vm
.exec_in_guest("lspci -n")
.unwrap()
.trim()
.replace("\r", "");
assert_eq!(
expected,
result,
"PCI Devices changed:\n<<< Expected <<<\n{}\n<<<<<<<<<<<<<<<<\n>>> Got >>>\n{}\n>>>>>>>>>>>>>>>>\n",
expected, result
);
}

View file

@ -1,7 +1,7 @@
// Copyright 2020 The Chromium OS Authors. All rights reserved. // Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
mod fixture; pub mod fixture;
use fixture::Config; use fixture::Config;
use fixture::TestVm; use fixture::TestVm;

View file

@ -0,0 +1,7 @@
00:00.0 0600: 8086:1237
00:01.0 00ff: 1af4:1042 (rev 01)
00:02.0 00ff: 1af4:1044 (rev 01)
00:03.0 00ff: 1af4:1045 (rev 01)
00:04.0 0c03: 1b73:1000
00:05.0 ffff: 1b36:0011 (rev 01)
00:06.0 0604: 8086:3420