Merge pull request #1058 from puppetlabs/issue-1057
authorCraig Gumbley <craiggumbley@gmail.com>
Wed, 31 Aug 2022 17:22:23 +0000 (18:22 +0100)
committerGitHub <noreply@github.com>
Wed, 31 Aug 2022 17:22:23 +0000 (18:22 +0100)
manifests/ppa.pp
spec/defines/ppa_spec.rb

index f6cba8d38abff2d597797b7ac98f9627f9d5def0..ed7057c8539f0be47011e78197241a87cddefa48 100644 (file)
@@ -40,7 +40,7 @@ define apt::ppa (
   }
 
   # Validate the resource name
-  if $name !~ /^ppa:([a-zA-Z0-9\-_]+)\/([a-zA-z0-9\-_]+)$/ {
+  if $name !~ /^ppa:([a-zA-Z0-9\-_]+)\/([a-zA-z0-9\-_\.]+)$/ {
     fail("Invalid PPA name: ${name}")
   }
 
index 74265cde99bbc5376ec31962f70d42cf862e3bb5..b8e734d09ff294b918a5a8f25a45c8551671cca1 100644 (file)
@@ -44,6 +44,69 @@ describe 'apt::ppa' do
     }
   end
 
+  [
+    'ppa:foo/bar',
+    'ppa:foo/bar1.0',
+    'ppa:foo10/bar10',
+    'ppa:foo-/bar_',
+  ].each do |value|
+    describe 'valid resource names' do
+      let :facts do
+        {
+          os: {
+            family: 'Debian',
+            name: 'Ubuntu',
+            release: {
+              major: '18',
+              full: '18.04',
+            },
+            distro: {
+              codename: 'trusty',
+              id: 'Ubuntu',
+            },
+          },
+        }
+      end
+
+      let(:title) { value }
+
+      it { is_expected.not_to raise_error }
+      it { is_expected.to contain_exec("add-apt-repository-#{value}") }
+    end
+  end
+
+  [
+    'ppa:foo!/bar',
+    'ppa:foo/bar!',
+    'ppa:foo1.0/bar',
+    'ppa:foo/bar/foobar',
+    '|| ls -la ||',
+    '|| touch /tmp/foo.txt ||',
+  ].each do |value|
+    describe 'invalid resource names' do
+      let :facts do
+        {
+          os: {
+            family: 'Debian',
+            name: 'Ubuntu',
+            release: {
+              major: '18',
+              full: '18.04',
+            },
+            distro: {
+              codename: 'trusty',
+              id: 'Ubuntu',
+            },
+          },
+        }
+      end
+
+      let(:title) { value }
+
+      it { is_expected.to raise_error(Puppet::PreformattedError, %r{Invalid PPA name: #{value}}) }
+    end
+  end
+
   describe 'Ubuntu 15.10 sources.list filename' do
     let :facts do
       {