From fb478b30f6161d6248fcab1f84915b7a6534cba8 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 11 Oct 2017 17:50:40 +0200 Subject: [PATCH] Fixes #16913 - Add validation for the dhcp range --- spec/aliases/range_spec.rb | 35 +++++++++++++++++++ .../test_module/manifests/range.pp | 6 ++++ types/range.pp | 1 + 3 files changed, 42 insertions(+) create mode 100644 spec/aliases/range_spec.rb create mode 100644 spec/static_fixtures/test_module/manifests/range.pp create mode 100644 types/range.pp diff --git a/spec/aliases/range_spec.rb b/spec/aliases/range_spec.rb new file mode 100644 index 00000000..ca18210c --- /dev/null +++ b/spec/aliases/range_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe 'test_module::range', type: :class do + describe 'valid handling' do + [ + '192.0.2.100', + '192.0.2.100 192.0.2.200', + '1.1.1.1 255.255.255.255', + 'dynamic-bootp 192.0.2.100 192.0.2.200', + ].each do |value| + describe value.inspect do + let(:params) {{ value: value }} + it { is_expected.to compile } + end + end + end + + describe 'invalid value handling' do + context 'garbage inputs' do + [ + nil, + "all", + "all all", + "1 192.0.2.183", + "192.0.2.100 1", + ].each do |value| + describe value.inspect do + let(:params) {{ value: value }} + it { is_expected.to compile.and_raise_error(/parameter 'value' expects a match for Dhcp::Range/) } + end + end + end + + end +end diff --git a/spec/static_fixtures/test_module/manifests/range.pp b/spec/static_fixtures/test_module/manifests/range.pp new file mode 100644 index 00000000..09edf8df --- /dev/null +++ b/spec/static_fixtures/test_module/manifests/range.pp @@ -0,0 +1,6 @@ +# Class to test the dhcp::Range type +class test_module::range( + Dhcp::Range $value, +) { + notice('Success') +} diff --git a/types/range.pp b/types/range.pp new file mode 100644 index 00000000..fb6611d8 --- /dev/null +++ b/types/range.pp @@ -0,0 +1 @@ +type Dhcp::Range= Pattern[/^(dynamic-bootp )?((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d)))(\/((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))|[0-9]+))?( ((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d)))(\/((([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))[.]){3}([0-9](?!\d)|[1-9][0-9](?!\d)|1[0-9]{2}(?!\d)|2[0-4][0-9](?!\d)|25[0-5](?!\d))|[0-9]+))?)?$/]