diff --git a/polkadot/.gitlab-ci.yml b/polkadot/.gitlab-ci.yml
index 0e8c64dc07..84d63aa981 100644
--- a/polkadot/.gitlab-ci.yml
+++ b/polkadot/.gitlab-ci.yml
@@ -227,6 +227,8 @@ build-linux-stable:
# Enable debug assertions since we are running optimized builds for testing
# but still want to have debug assertions.
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
+ # Ensure we run the UI tests.
+ RUN_UI_TESTS: 1
script:
- time cargo build --profile testnet --features pyroscope --verbose --bin polkadot
- sccache -s
diff --git a/polkadot/Cargo.lock b/polkadot/Cargo.lock
index 4e989fd450..5365e05947 100644
--- a/polkadot/Cargo.lock
+++ b/polkadot/Cargo.lock
@@ -7106,6 +7106,7 @@ dependencies = [
"polkadot-node-network-protocol",
"polkadot-node-primitives",
"polkadot-overseer-gen-proc-macro",
+ "rustversion",
"thiserror",
"tracing-gum",
"trybuild",
diff --git a/polkadot/node/overseer/overseer-gen/Cargo.toml b/polkadot/node/overseer/overseer-gen/Cargo.toml
index 7296a1aaf7..282113d244 100644
--- a/polkadot/node/overseer/overseer-gen/Cargo.toml
+++ b/polkadot/node/overseer/overseer-gen/Cargo.toml
@@ -20,6 +20,7 @@ pin-project = "1.0"
[dev-dependencies]
trybuild = "1.0.53"
+rustversion = "1.0.6"
[features]
default = []
diff --git a/polkadot/node/overseer/overseer-gen/src/tests.rs b/polkadot/node/overseer/overseer-gen/src/tests.rs
index ad8745b386..09de7ed4d3 100644
--- a/polkadot/node/overseer/overseer-gen/src/tests.rs
+++ b/polkadot/node/overseer/overseer-gen/src/tests.rs
@@ -1,15 +1,39 @@
-// The generated code requires quite a bit of surrounding code to work.
-// Please refer to [the examples](examples/dummy.rs) and
-// [the minimal usage example](../examples/minimal-example.rs).
+// Copyright 2022 Parity Technologies (UK) Ltd.
+// This file is part of Polkadot.
+
+// Polkadot is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Polkadot is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Polkadot. If not, see .
#[test]
+#[rustversion::attr(not(stable), ignore)]
fn ui_compile_fail() {
+ // Only run the ui tests when `RUN_UI_TESTS` is set.
+ if std::env::var("RUN_UI_TESTS").is_err() {
+ return
+ }
+
let t = trybuild::TestCases::new();
t.compile_fail("tests/ui/err-*.rs");
}
#[test]
+#[rustversion::attr(not(stable), ignore)]
fn ui_pass() {
+ // Only run the ui tests when `RUN_UI_TESTS` is set.
+ if std::env::var("RUN_UI_TESTS").is_err() {
+ return
+ }
+
let t = trybuild::TestCases::new();
t.pass("tests/ui/ok-*.rs");
}
diff --git a/polkadot/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr b/polkadot/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr
index 18ba674324..ea67ef7aad 100644
--- a/polkadot/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr
+++ b/polkadot/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr
@@ -1,14 +1,3 @@
-error[E0119]: conflicting implementations of trait `std::convert::From` for type `AllMessages`
- --> tests/ui/err-01-duplicate-consumer.rs:19:1
- |
-19 | #[overlord(signal=SigSigSig, event=Event, gen=AllMessages, error=OverseerError)]
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- | |
- | first implementation here
- | conflicting implementation for `AllMessages`
- |
- = note: this error originates in the attribute macro `overlord` (in Nightly builds, run with -Z macro-backtrace for more info)
-
error[E0119]: conflicting implementations of trait `polkadot_overseer_gen::SubsystemSender` for type `OverseerSubsystemSender`
--> tests/ui/err-01-duplicate-consumer.rs:19:1
|
@@ -19,3 +8,14 @@ error[E0119]: conflicting implementations of trait `polkadot_overseer_gen::Subsy
| conflicting implementation for `OverseerSubsystemSender`
|
= note: this error originates in the attribute macro `overlord` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0119]: conflicting implementations of trait `std::convert::From` for type `AllMessages`
+ --> tests/ui/err-01-duplicate-consumer.rs:19:1
+ |
+19 | #[overlord(signal=SigSigSig, event=Event, gen=AllMessages, error=OverseerError)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ | |
+ | first implementation here
+ | conflicting implementation for `AllMessages`
+ |
+ = note: this error originates in the attribute macro `overlord` (in Nightly builds, run with -Z macro-backtrace for more info)
diff --git a/polkadot/scripts/update-rust-stable.sh b/polkadot/scripts/update-rust-stable.sh
new file mode 100755
index 0000000000..4e24d6338d
--- /dev/null
+++ b/polkadot/scripts/update-rust-stable.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+#
+# Script for updating the UI tests for a new rust stable version.
+#
+# It needs to be called like this:
+#
+# update-rust-stable.sh 1.61
+#
+# This will run all UI tests with the rust stable 1.61. The script
+# requires that rustup is installed.
+set -e
+
+if [ "$#" -ne 1 ]; then
+ echo "Please specify the rust version to use. E.g. update-rust-stable.sh 1.61"
+ exit
+fi
+
+RUST_VERSION=$1
+
+if ! command -v rustup &> /dev/null
+then
+ echo "rustup needs to be installed"
+ exit
+fi
+
+rustup install $RUST_VERSION
+rustup component add rust-src --toolchain $RUST_VERSION
+
+# Ensure we run the ui tests
+export RUN_UI_TESTS=1
+# We don't need any wasm files for ui tests
+export SKIP_WASM_BUILD=1
+# Let trybuild overwrite the .stderr files
+export TRYBUILD=overwrite
+
+# Run all the relevant UI tests
+#
+# Any new UI tests in different crates need to be added here as well.
+rustup run $RUST_VERSION cargo test -p polkadot-overseer-gen ui