<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>