inspec/test/unit/resources/crontab_test.rb

183 lines
5 KiB
Ruby
Raw Normal View History

require "helper"
require "inspec/resource"
require "inspec/resources/crontab"
describe "Inspec::Resources::Crontab" do
let(:crontab) { load_resource("crontab") }
it "retrieve minutes via field" do
_(crontab.minutes).must_equal %w{0 1}
end
it "retrieve hours via field" do
_(crontab.hours).must_equal %w{2 3}
end
it "retrieve days via field" do
_(crontab.days).must_equal %w{11 12}
end
it "retrieve months via field" do
_(crontab.months).must_equal %w{9 10}
end
it "retrieve weekdays via field" do
_(crontab.weekdays).must_equal %w{4 5}
end
it "retrieve commands via field" do
_(crontab.commands).must_equal [ "/path/to/script1", "/path/to/script2 arg1 arg2" ]
end
it "returns all params of the file" do
_(crontab.params).must_equal([
{
"minute" => "0",
"hour" => "2",
"day" => "11",
"month" => "9",
"weekday" => "4",
"user" => nil,
"command" => "/path/to/script1",
},
{
"minute" => "1",
"hour" => "3",
"day" => "12",
"month" => "10",
"weekday" => "5",
"user" => nil,
"command" => "/path/to/script2 arg1 arg2",
},
])
end
it "prints a nice to_s string" do
_(crontab.to_s).must_equal "crontab for current user"
end
describe "filter by command" do
let(:entry) { crontab.commands(/script2/) }
it "returns the correct content" do
_(entry.content).must_equal "1 3 12 10 5 /path/to/script2 arg1 arg2"
end
it "prints a nice to_s string" do
_(entry.to_s).must_equal "crontab for current user with command == /script2/"
end
end
describe "query by user" do
let(:crontab) { load_resource("crontab", "foouser") }
it "prints a user-specific to_s string" do
_(crontab.to_s).must_equal "crontab for user foouser"
end
end
describe "query by path" do
let(:crontab) { load_resource("crontab", { path: "/etc/cron.d/crondotd" }) }
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
it "prints a nice to_s string" do
_(crontab.to_s).must_equal "crontab for path /etc/cron.d/crondotd"
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
end
it "returns all params of the file" do
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
_(crontab.params).must_equal(
[{
"minute" => "0",
"hour" => "2",
"day" => "11",
"month" => "9",
"weekday" => "4",
"user" => "root",
"command" => "/path/to/crondotd1",
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
},
{
"minute" => "1",
"hour" => "3",
"day" => "12",
"month" => "10",
"weekday" => "5",
"user" => "daemon",
"command" => "/path/to/crondotd2 arg1 arg2",
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
},
{
"minute" => "0",
"hour" => "0",
"day" => "1",
"month" => "1",
"weekday" => "*",
"user" => "root",
"command" => "/usr/local/bin/foo.sh bar",
}]
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
)
end
end
describe "special strings" do
let(:crontab) { load_resource("crontab", "special") }
it "returns all params of the file" do
_(crontab.params).must_equal([
{
"minute" => "*",
"hour" => "*",
"day" => "*",
"month" => "*",
"weekday" => "*",
"user" => "special",
"command" => "/bin/custom_script.sh",
},
{
"minute" => "0",
"hour" => "0",
"day" => "1",
"month" => "1",
"weekday" => "*",
"user" => "special",
"command" => "/usr/local/bin/foo.sh bar",
},
{
"minute" => "-1",
"hour" => "-1",
"day" => "-1",
"month" => "-1",
"weekday" => "-1",
"user" => "special",
"command" => '/bin/echo "Rebooting" > /var/log/rebooting.log',
},
])
end
end
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
describe "it raises errors" do
it "fails and raises error on unsupported os" do
resource = MockLoader.new(:windows).load_resource("crontab", { user: "special" })
_(resource.resource_failed?).must_equal true
_(resource.resource_exception_message)
.must_equal "Resource `crontab` is not supported on platform windows/6.2.9200."
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
end
it "raises error when no user or path supplied" do
resource = load_resource("crontab", {})
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
_(resource.resource_failed?).must_equal true
_(resource.resource_exception_message).must_equal "A user or path must be supplied."
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
end
it "raises error when both user or path supplied" do
resource = load_resource("crontab", { 'user': "someuser", 'path': "somefile" })
_(resource.resource_failed?).must_equal true
_(resource.resource_exception_message).must_equal "Either user or path must be supplied, not both!"
end
it "raises error when supplied path does not exist" do
resource = load_resource("crontab", { 'path': "/definitely/not/there/somefile" })
_(resource.resource_failed?).must_equal true
_(resource.resource_exception_message).must_equal "Supplied crontab path '/definitely/not/there/somefile' must exist!"
end
Allow crontab resource to read crontab at user specified paths. (#2328) * add a emulated /etc/cron.d/crondotd file to the mocking system. * test that we handle incoming paths correctly by rendering to_s. * We take in both users and a path, so lets call that destination. * To make the test pass we'll determine if we are dealing with a path or a user and return the correct string. * we will need the ability to determine if we are dealing with a path when either calling the crontab command or reading the file directly, so break that out into a path? method. * remove author field. * test contents of our crondotd file. * we have to explicitly make @destination a String to use include?. * when we get a path we use inspec.file to get conents, otherwise we run the crontab command. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add documentation for example usage with file path. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Make path? and path_or_user private methods Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add missing username filed to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Pass argument as a hash when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Expected results should include usernames when testing file paths Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add special string `@yearly` test to crondotd mock file Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to existing cron tests Signed-off-by: Miah Johnson <miah@chia-pet.org> * Rubocop says I need spaces after/before curly brackets Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to crondotd file tests and add @yearly test Signed-off-by: Miah Johnson <miah@chia-pet.org> * Modify initialize to take options hash and be backwards compatible. Change initialize default argument to create a hash by default, though it is still possible to pass in a 'user' string argument. @user gets set with the argument value unless its a hash, in which case it tries to set the value of the user key, otherwise it becomes nil. @file gets set with the value of the path key, unless it doesn't exist in which case it becomes nil. All hash keys are symbolized to ensure consistent access. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Check if @path is nil to determine if we run crontab command or parse file. path? was removed as we're not overloading a @destination variable anymore. Signed-off-by: Miah Johnson <miah@chia-pet.org> * if @user is nil assume current user otherwise crontab for @user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Change to complete if rather than ternary. We have three possible cases, current user, other user, or file path. This accounts for all of them. Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add user to the crontab FilterTable Signed-off-by: Miah Johnson <miah@chia-pet.org> * Remove path? and path_or_user Signed-off-by: Miah Johnson <miah@chia-pet.org> * Move crontab parsing to two methods, parse_user_crontab and parse_system_crontab Because a command in a crontab file could have spaces we must parse user and system crontabs differently. When we parse user crontabs the user field will either be nil, or the requested user. Both user and path parsers handle special strings (@yearly, @weekly, etc). And also account for position of user in these files (or adds it in user case) Signed-off-by: Miah Johnson <miah@chia-pet.org> * Update examples with user: and path: Signed-off-by: Miah Johnson <miah@chia-pet.org> * Add spaces after : in example docs Signed-off-by: Miah Johnson <miah@chia-pet.org> * Disable rubocop ClassLength check Signed-off-by: Miah Johnson <miah@chia-pet.org> * Moved rubocop ClassLength metric next to class instead of above the module. Remove unnecessary braces. Add is_system_crontab? and is_user_crontab helper methods and use them. Add tests to see if error conditions are raised when the resource is invoked with missing parameters (user, or path), and on a unsupported os. Change initialize to group all hash functions together and raise errors when user and path is unset. Also raise errors on unsupported operating systems. Change order of ternary and use is_system_crontab? rather than @path.nil? Signed-off-by: Miah Johnson <miah@chia-pet.org>
2017-12-07 12:50:07 +00:00
end
end