aboutsummaryrefslogtreecommitdiffstats
path: root/node-admin
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@oath.com>2018-08-28 09:31:56 +0200
committerHåkon Hallingstad <hakon@oath.com>2018-08-28 09:31:56 +0200
commitd8beea0be39ed0e3a9686a9f555d7d279e08dde1 (patch)
tree76d21cdbdf59be9dda2a771a0391b7b7566c351e /node-admin
parent1599bbee277b3065ef327bf98acd4cf71a2d6a97 (diff)
Require digit in version and release
Diffstat (limited to 'node-admin')
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/Yum.java14
-rw-r--r--node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java14
2 files changed, 18 insertions, 10 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/Yum.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/Yum.java
index 22fba731b02..5a95c90d216 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/Yum.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/Yum.java
@@ -175,9 +175,9 @@ public class Yum {
}
/** YUM package name. */
- private static class PackageName {
+ static class PackageName {
private static final Pattern ARCHITECTURE_PATTERN = Pattern.compile("\\.(noarch|x86_64|i686|i386|\\*)$");
- private static final Pattern NAME_VER_REL_PATTERN = Pattern.compile("^(.+)-([^-]+)-([^-]+)$");
+ private static final Pattern NAME_VER_REL_PATTERN = Pattern.compile("^(.+)-([^-]*[0-9][^-]*)-([^-]*[0-9][^-]*)$");
public final Optional<String> epoch;
public final String name;
@@ -197,13 +197,6 @@ public class Yum {
this.architecture = architecture;
}
- public static PackageName fromComponents(String name, String version, String release) {
- if (name.isEmpty()) throw new IllegalArgumentException("Name is empty");
- if (version.isEmpty()) throw new IllegalArgumentException("Version is empty");
- if (release.isEmpty()) throw new IllegalArgumentException("Release is empty");
- return new PackageName(Optional.empty(), name, Optional.of(version), Optional.of(release), Optional.empty());
- }
-
/**
* Parse the string specification of a YUM package.
*
@@ -215,7 +208,8 @@ public class Yum {
* <li>If specified, arch MUST be one of "noarch", "i686", "x86_64", or "*". The wildcard
* is equivalent to not specifying arch.
* <li>rel cannot end in something that would be mistaken for the '.arch' suffix.
- * <li>ver and rel are assumed to not contain any '-' to uniquely identify name.
+ * <li>ver and rel are assumed to not contain any '-' to uniquely identify name,
+ * and must contain a digit.
* </ul>
*
* @param spec A package name of the form epoch:name-ver-rel.arch, name-ver-rel.arch, or name-ver-rel.
diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java
index f2a2306263a..896914b7967 100644
--- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java
+++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/task/util/yum/YumTest.java
@@ -191,4 +191,18 @@ public class YumTest {
yum.upgrade().converge(taskContext);
}
+
+ @Test
+ public void parsePackageName() {
+ Yum.PackageName packageName = Yum.PackageName.fromString("docker-engine-selinux-1.12.6-1.el7");
+ assertEquals("docker-engine-selinux", packageName.getName());
+ assertEquals("1.12.6", packageName.getVersion().get());
+ assertEquals("1.el7", packageName.getRelease().get());
+ assertEquals("0:docker-engine-selinux-1.12.6-1.el7.*", packageName.toFullName());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void failParsingOfPackageName() {
+ Yum.PackageName.fromString("docker-engine-selinux");
+ }
} \ No newline at end of file