<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ci/+/22335">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">repo-install-test: add test_conflict<br><br>Install one Osmocom package from one package feed and attempt to install<br>a second package from a different feed. Verify that the package manager<br>exits with error and mentions the conflict in its output.<br><br>Related: OS#4733<br>Change-Id: Icf2a3a1d1de2ff42b1dc9aadf2075e5e1ff40291<br>---<br>M scripts/repo-install-test.sh<br>M scripts/repo-install-test/run-inside-docker.sh<br>2 files changed, 107 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ci refs/changes/35/22335/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/scripts/repo-install-test.sh b/scripts/repo-install-test.sh</span><br><span>index 71e55d7..7585509 100755</span><br><span>--- a/scripts/repo-install-test.sh</span><br><span>+++ b/scripts/repo-install-test.sh</span><br><span>@@ -3,6 +3,7 @@</span><br><span> # * INTERACTIVE: set to 1 to keep an interactive shell open after the script ran (for debugging)</span><br><span> # * FEED: binary package feed (e.g. "latest", "nightly")</span><br><span> # * PROJ: OBS project namespace (e.g. "network:osmocom:latest")</span><br><span style="color: hsl(120, 100%, 40%);">+# * PROJ_CONFLICT: Conflicting OBS project namespace (e.g. "network:osmocom:nightly")</span><br><span> # * KEEP_CACHE: set to 1 to keep downloaded binary packages (for development)</span><br><span> # * TESTS: which tests to run (all by default, see below for possible values)</span><br><span> . "$(dirname "$0")/common.sh"</span><br><span>@@ -23,12 +24,31 @@</span><br><span> </span><br><span> if [ -z "$TESTS" ]; then</span><br><span> TESTS="</span><br><span style="color: hsl(120, 100%, 40%);">+ test_conflict</span><br><span> install_repo_packages</span><br><span> test_binaries</span><br><span> services_check</span><br><span> "</span><br><span> fi</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+if [ -z "$PROJ_CONFLICT" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+ case "$FEED" in</span><br><span style="color: hsl(120, 100%, 40%);">+ latest)</span><br><span style="color: hsl(120, 100%, 40%);">+ PROJ_CONFLICT="network:osmocom:nightly"</span><br><span style="color: hsl(120, 100%, 40%);">+ ;;</span><br><span style="color: hsl(120, 100%, 40%);">+ nightly)</span><br><span style="color: hsl(120, 100%, 40%);">+ PROJ_CONFLICT="network:osmocom:latest"</span><br><span style="color: hsl(120, 100%, 40%);">+ if [ "$DISTRO" = "centos8" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+ # Doesn't have packages built for "latest" yet</span><br><span style="color: hsl(120, 100%, 40%);">+ PROJ_CONFLICT="network:osmocom:next"</span><br><span style="color: hsl(120, 100%, 40%);">+ fi</span><br><span style="color: hsl(120, 100%, 40%);">+ ;;</span><br><span style="color: hsl(120, 100%, 40%);">+ next)</span><br><span style="color: hsl(120, 100%, 40%);">+ PROJ_CONFLICT="network:osmocom:nightly"</span><br><span style="color: hsl(120, 100%, 40%);">+ ;;</span><br><span style="color: hsl(120, 100%, 40%);">+ esac</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Try to run "systemctl status" 10 times, kill the container on failure</span><br><span> check_if_systemd_is_running() {</span><br><span> for i in $(seq 1 10); do</span><br><span>@@ -66,6 +86,7 @@</span><br><span> --name "$CONTAINER" \</span><br><span> -e FEED="$FEED" \</span><br><span> -e PROJ="$PROJ" \</span><br><span style="color: hsl(120, 100%, 40%);">+ -e PROJ_CONFLICT="$PROJ_CONFLICT" \</span><br><span> -e DISTRO="$DISTRO" \</span><br><span> -e TESTS="$TESTS" \</span><br><span> -e container=docker \</span><br><span>diff --git a/scripts/repo-install-test/run-inside-docker.sh b/scripts/repo-install-test/run-inside-docker.sh</span><br><span>index 79dd3cf..f7d1449 100755</span><br><span>--- a/scripts/repo-install-test/run-inside-docker.sh</span><br><span>+++ b/scripts/repo-install-test/run-inside-docker.sh</span><br><span>@@ -2,6 +2,7 @@</span><br><span> # Environment variables:</span><br><span> # * FEED: binary package feed (e.g. "latest", "nightly")</span><br><span> # * PROJ: OBS project namespace (e.g. "network:osmocom:latest")</span><br><span style="color: hsl(120, 100%, 40%);">+# * PROJ_CONFLICT: Conflicting OBS project namespace (e.g. "network:osmocom:nightly")</span><br><span> # * KEEP_CACHE: set to 1 to keep downloaded binary packages (for development)</span><br><span> # * DISTRO: linux distribution name (e.g. "debian", "centos")</span><br><span> # * TESTS: which tests to run (see repo-install-test.sh)</span><br><span>@@ -59,6 +60,12 @@</span><br><span> echo "ERROR: missing environment variable \$PROJ!"</span><br><span> exit 1</span><br><span> fi</span><br><span style="color: hsl(120, 100%, 40%);">+ if [ -n "$PROJ_CONFLICT" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+ echo "Checking conflicting project: $PROJ_CONFLICT"</span><br><span style="color: hsl(120, 100%, 40%);">+ else</span><br><span style="color: hsl(120, 100%, 40%);">+ echo "ERROR: missing environment variable \$PROJ_CONFLICT!"</span><br><span style="color: hsl(120, 100%, 40%);">+ exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+ fi</span><br><span> if [ -n "$DISTRO" ]; then</span><br><span> echo "Linux distribution: $DISTRO"</span><br><span> else</span><br><span>@@ -92,6 +99,12 @@</span><br><span> }</span><br><span> </span><br><span> # $1: OBS project (e.g. "network:osmocom:nightly")</span><br><span style="color: hsl(120, 100%, 40%);">+configure_osmocom_repo_debian_remove() {</span><br><span style="color: hsl(120, 100%, 40%);">+ local proj="$1"</span><br><span style="color: hsl(120, 100%, 40%);">+ rm "/etc/apt/sources.list.d/$proj.list"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# $1: OBS project (e.g. "network:osmocom:nightly")</span><br><span> configure_osmocom_repo_centos8() {</span><br><span> local proj="$1"</span><br><span> local baseurl="https://download.opensuse.org/repositories/$(proj_with_slashes "$proj")/CentOS_8"</span><br><span>@@ -110,6 +123,12 @@</span><br><span> EOF</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# $1: OBS project (e.g. "network:osmocom:nightly")</span><br><span style="color: hsl(120, 100%, 40%);">+configure_osmocom_repo_centos8_remove() {</span><br><span style="color: hsl(120, 100%, 40%);">+ local proj="$1"</span><br><span style="color: hsl(120, 100%, 40%);">+ rm "/etc/yum.repos.d/$proj.repo"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> configure_keep_cache_debian() {</span><br><span> if [ -z "$KEEP_CACHE" ]; then</span><br><span> return</span><br><span>@@ -130,6 +149,70 @@</span><br><span> echo "keepcache=1" >> /etc/dnf/dnf.conf</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# $1: file</span><br><span style="color: hsl(120, 100%, 40%);">+# $2-n: patterns to look for in file with grep</span><br><span style="color: hsl(120, 100%, 40%);">+find_patterns_or_exit() {</span><br><span style="color: hsl(120, 100%, 40%);">+ local file="$1"</span><br><span style="color: hsl(120, 100%, 40%);">+ local pattern</span><br><span style="color: hsl(120, 100%, 40%);">+ shift</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ for pattern in "$@"; do</span><br><span style="color: hsl(120, 100%, 40%);">+ if grep -q "$pattern" "$file"; then</span><br><span style="color: hsl(120, 100%, 40%);">+ continue</span><br><span style="color: hsl(120, 100%, 40%);">+ fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ echo "ERROR: could not find pattern '$pattern' in file '$file'!"</span><br><span style="color: hsl(120, 100%, 40%);">+ exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+ done</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+test_conflict_debian() {</span><br><span style="color: hsl(120, 100%, 40%);">+ apt-get -y install libosmocore</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_debian_remove "$PROJ"</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_debian "$PROJ_CONFLICT"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ (apt-get -y install osmo-mgw 2>&1 && touch /tmp/fail) | tee /tmp/out</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if [ -e /tmp/fail ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+ echo "ERROR: unexpected exit 0!"</span><br><span style="color: hsl(120, 100%, 40%);">+ exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+ fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ find_patterns_or_exit \</span><br><span style="color: hsl(120, 100%, 40%);">+ /tmp/out \</span><br><span style="color: hsl(120, 100%, 40%);">+ "requested an impossible situation" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "^The following packages have unmet dependencies:" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "Depends: osmocom-" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "but it is not going to be installed"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_debian_remove "$PROJ_CONFLICT"</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_debian "$PROJ"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+test_conflict_centos8() {</span><br><span style="color: hsl(120, 100%, 40%);">+ dnf -y install libosmocore-devel</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_centos8_remove "$PROJ"</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_centos8 "$PROJ_CONFLICT"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ (dnf -y install osmo-mgw 2>&1 && touch /tmp/fail) | tee /tmp/out</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if [ -e /tmp/fail ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+ echo "ERROR: unexpected exit 0!"</span><br><span style="color: hsl(120, 100%, 40%);">+ exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+ fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ find_patterns_or_exit \</span><br><span style="color: hsl(120, 100%, 40%);">+ /tmp/out \</span><br><span style="color: hsl(120, 100%, 40%);">+ "^Error:" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "but none of the providers can be installed" \</span><br><span style="color: hsl(120, 100%, 40%);">+ "conflicts with osmocom-"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_centos8_remove "$PROJ_CONFLICT"</span><br><span style="color: hsl(120, 100%, 40%);">+ configure_osmocom_repo_centos8 "$PROJ"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Filter $PWD/osmocom_packages_all.txt through a blacklist_$DISTRO.txt and store the result in</span><br><span> # $PWD/osmocom_packages.txt.</span><br><span> filter_packages_txt() {</span><br><span>@@ -259,6 +342,9 @@</span><br><span> set -x</span><br><span> </span><br><span> case "$test" in</span><br><span style="color: hsl(120, 100%, 40%);">+ test_conflict)</span><br><span style="color: hsl(120, 100%, 40%);">+ test_conflict_${DISTRO}</span><br><span style="color: hsl(120, 100%, 40%);">+ ;;</span><br><span> install_repo_packages)</span><br><span> install_repo_packages_${DISTRO}</span><br><span> ;;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ci/+/22335">change 22335</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ci/+/22335"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ci </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Icf2a3a1d1de2ff42b1dc9aadf2075e5e1ff40291 </div>
<div style="display:none"> Gerrit-Change-Number: 22335 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>