summaryrefslogtreecommitdiffstats
path: root/spec
Commit message (Collapse)AuthorAgeFilesLines
* Fix for #4489 -- apply was using the rest terminusMarkus Roberts2010-08-241-1/+12
| | | | | | | | | | Basing pervasive low-level behaviour changes on the application name isn't a good idea, but if we're going to do it we need to remember to update the test when we rename the application. I am not certain that this change is globally correct; there may be other related problems that will not be fixed (and may in fact be exacerbated) by this patch.
* Fix for #4542 -- included classes weren't assigned proper stagesMarkus Roberts2010-08-241-1/+12
| | | | | | This commit unifies the code paths on which classes are added, alters the default stage to respect the stage of the parent if any, and assures that the resource is notified if its stage is assigned (turning an implicit stage into an explicit one).
* Fix for #4518 -- classes not getting added to compiler.classesMarkus Roberts2010-08-211-0/+17
| | | | | | | The responsibility for adding classes to the compiler's classes list (for use in constructing classes.txt) moved around a bit in the 0.25 to 2.6 transition before being dropped in a merge conflict resolution. Ooops. This restores it, and adds tests to prevent regression.
* [#4545] Remove obsolete 'trac' specsJesse Wolfe2010-08-211-19/+0
| | | | | The method that these specs were testing has been removed, causing the specs to fail.
* Maint. -- Fix test failures broken by previous commitMarkus Roberts2010-08-211-6/+18
| | | | | | | This basically involved adding a search method to the yaml indirector, which I did by copying the one from ssl_file and fiddling with it until the tests passed. Since the most straight forward way to do this required extending the interface to the path method I added tests for the additional behaviour.
* [#4298] Puppet apply prints an error if the file to apply doesn't existMatt Robinson2010-08-211-3/+21
| | | | | | | | Also warns you it's skipping files if you pass it more than one file to apply. Reviewed-by: Nick Lewis <nick@puppetlabs.com> Signed-off-by: Matt Robinson <matt@puppetlabs.com>
* Further RST to Markdown fixes for types, values, testsJames Turnbull2010-08-121-2/+2
|
* Maint. Passenger fix broke a testMarkus Roberts2010-08-061-3/+3
| | | | The content-length fix for passenger broke a test; this fixes it.
* Fixes #4485 -- single quoted strings should not treat \n as new lineMarkus Roberts2010-08-051-0/+1
| | | | | | | | | | | | This is the rest of the change for #4303; James and I discussed various ways the solution to that ticket needed to be extended but, as neither of us committed code, nothing changed. This is the least implact extension, which mimics the behaviour of prior versions. It leaves open the question: should '\\x' start with a single or double backslash? If, as now, '\\x' starts with a double backslash (i.e. single quote is the only escapable characterin single quoted strings) a string ending in a backslash can not be represented in a single quoted string.
* [#4364] Fix failing spec due to incorrect loglevelJesse Wolfe2010-08-041-1/+1
| | | | | A spec was failing since it wasn't updated when the #4364 change was made.
* Fix for #4465 -- earlier "feature" patch broke ldapMarkus Roberts2010-08-041-17/+19
| | | | | | | | | The patch for #3904 should not have been accepted; it's buggy and the use case (supporting having nodes in ldap more than once with the same name but distinct records) is ill-conceived. This commit reverts the patch (a7884b47) and the previous attempt to fix it (e6709da4), restoring the old (0.25.x) behaviour.
* [#4467] Make Puppet Master respect facts_terminus settingsRein Henrichs2010-08-042-6/+13
| | | | | | | | | * Remove hard-coded facts terminus in master * Change facts_terminus default to 'yaml' for master and 'facter' for everything else. Paired-with: Matt Robinson <matt@puppetlabs.com> Signed-off-by: Rein Henrichs <rein@puppetlabs.com>
* [#4370] Fixes extlookup precedence getting overwritten between runsMatt Robinson2010-08-032-3/+17
| | | | | | | | | | | | | | | We found the gsub! in extlookup was actually modifying the value for extlookup_precedence, so the next node to call it just got the interpolated value from the first run. We did two things in the code to prevent this: 1. We returned a dup of the ast string object so that modifying it wouldn’t change puppet’s state. We didn’t do this for all possible return values because we depend on using the original ast array object to do array concatenation 2. We fixed extlookup to not do a destructive gsub Reviewed by: Jesse Wolfe
* [#4423] repair parameterized class instantiationJesse Wolfe2010-08-031-0/+7
| | | | | | My earlier #4397 patch was not aware of the parameterized class instantiation syntax, and failed on manifests that instantiate parameterized classes.
* [#4423] class { shouldn't get stored on the namespace stackJesse Wolfe2010-08-031-0/+6
| | | | | | | The new syntax for instantiating parameterized classes was confusing the lexer's notion of namespaces. This is a simple fix to prevent that syntax from polluting the namespaces.
* [#4397]+[#4344] Move type-name resolution out of Puppet::Resource into the ↵Jesse Wolfe2010-08-0311-55/+80
| | | | | | | | | | | | | | | | | | AST resources. Move type-name resolution out of Puppet::Resource into the AST resources. Move find_resource_type out of Puppet::Resource into Scope Thus, never pass unqualified type names to Puppet::Resource objects. Thus, Puppet::Resource objects don't need the namespace property, and Puppet::Resource objects never consult the harddrive to look for .pp files that might contain their type definitions, Thus, performance is improved. Also removes the temporary fix for #4257 that caused #4397 (The code was too eager to look for a class in the topscope) Paired-With: Paul Berry <paul@puppetlabs.com> Signed-off-by: Jesse Wolfe <jes5199@gmail.com>
* [#4344] Fix for failing templates when module name matches file in local dir.Paul Berry2010-08-032-4/+4
| | | | | | | | | When the name of a module matches the name of a file in the local directory, puppet agent would sometimes try to read that file and interpret it as puppet code. This happened because files.rb was unintentionally permitting puppet files without an extension. Fixed by changing the glob pattern to only permit ".pp" and ".rb" extensions.
* [#4284] Fix failing specs run as root due to missing puppet groupNick Lewis2010-08-0311-0/+11
| | | | | | | These specs 'use' some settings which create directories belonging to the 'service' user/group. If the default service group doesn't exist, these fail. This patch explicitly sets the service group to the gid of the process, which is known to be accessible by the user.
* [#4242] Fixed (removed) a broken unit testNick Lewis2010-08-031-22/+0
| | | | | This test ran into a mocha bug, and was stubbing too much anyway. It's being moved to an acceptance test.
* Fix #4349 - Parsing with ignoreimport=true was always loading site.ppMarkus Roberts2010-07-251-0/+8
| | | | | | | | | With the type collection refactoring, when accessing a fresh collection puppet tries to import the site.pp manifest (perfrom_initial_import). In the case of puppetdoc, we are parsing site.pp by ourselves, so we ended parsing it twice, resulting in an "import loop detected" error. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Fix #4348 - Puppet doc single manifest brokenBrice Figureau2010-07-251-0/+13
| | | | | | | | The refactoring of using environment instances instead of strings for initializing the parser, rdoc wasn't updated, thus was unable to initialize the parser. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* extlookup() is a builtinJesse Wolfe2010-07-251-0/+85
| | | | | | This patch promotes extlookup() to being a builtin function. It also adds test and makes some minor tweaks to the code. The behavior of extlookup has been left unchanged.
* [#4333] old optparse doesn't support default_argv=Jesse Wolfe2010-07-251-12/+2
| | | | | optparse hasn't always had the concept of default_argv. Fortunately, we don't really need it.
* Fix #4319 - source file url sent to the master is invalidBrice Figureau2010-07-251-1/+1
| | | | | | | | | | | We were sending an incorrect (containing a //) url for sourced file content since the file streaming patches. Depending on the webserver in front of puppet it could fail (for instance nginx+mongrel). This patch fixes the offending // in each sourced file urls. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Fix for #4303 -- reverting to old escaping in '-stringsMarkus Roberts2010-07-251-0/+3
| | | | | Single quoted used to allow escape on single quotes and pass all other characters through without comment; now the do again.
* Fix #4302 - Compilation speed regression compared to 2.6Brice Figureau2010-07-251-3/+32
| | | | | | | | | | | | | | | | | | | | | Each time the compiler was accessing the loaded types, we were checking if the manifests had changed. This incurred a large performance cost compared to 0.25 and introduced race conditions if manifests changed while a thread was in the middle of a compilation. This tentative fix, based on Brice's, makes sure each thread will get access to the same loaded types collection for the durration of a compilation, even if the manifests change. We now only check for changed files at the start of a compilation or if the environment changes, and we maintain a per environment thread lock so that only one thread at a time can be reloading any particular environment (and the need-check is done inside the synchronize block so that only the first will actually load it). As long as the manifests don't change, the threads will share the same collection, so there is only duplication in memory for a brief window surrounding a change. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com> Second-author: Markus Roberts <markus@puppetlabs.com>
* Fix #4286 - rename puppetdoc global module <site> to __site__Brice Figureau2010-07-251-3/+3
| | | | | | | | | < and > might be invalid or borderline chars to use for a file name or an url. This patch changes those characters to __. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Temporary tweak to tests for #4242Markus Roberts2010-07-251-0/+5
| | | | | | | The tests introduced with the fix for #4242 have isolation issues apparently due to the creation of a stage resource which is global and persistent. This patch stubs the creation, marks the one test which is thus invalidated pending, and adds comments noting the problem.
* [#4242] Fixed recursion due to parents including their childrenNick Lewis2010-07-251-0/+50
| | | | | | | | | | | | | | | Resources mark themselves as evaluated to prevent being evaluated again. Unfortunately, they were not marking themselves until after they had finished being completely evaluated. Thus, there was nothing actually stopping recursive evaluations. This patch just makes resources mark themselves as evaluated when they start evaluating, and adds tests. The original setting of evaluated was done in an ensure block, so this doesn't change the behavior of a resource which fails to evaluate. The only places evaluated? is checked aren't affected by this change, as they wouldn't want to evaluate it when it's already being evaluated anyway.
* Fix for #3382 -- Empty classes as graph placeholdersMarkus Roberts2010-07-241-2/+12
| | | | | | | | | | As Brice discovered, the problem was that we simply ignored empty classes in the graph when determining application order. This patch instead replaces them with a resource of a new type which we've frequently noted the (internal) need for: a whit, the smallest possible resource, which has no properties or other semantics apart from its existence and its name. This resource then ensures application order through the normal mechanisms.
* Fixing #4268 - manifests always importedLuke Kanies2010-07-192-23/+16
| | | | | | | | | | | | | | The problem is that the environment list gets cleared when Settings#set_value is called, and it was being called every time Settings#use was called, which is more often than obvious but especially if reporting is enabled. Previously we ignored noop when running inside of Settings, and this essentially adds that back in, so we can remove the special noop behaviour in Settings itself. Signed-off-by: Luke Kanies <luke@puppetlabs.com>
* [#4269] Undef variables interpolate to empty stringNick Lewis2010-07-191-0/+31
| | | | | This fixes double-quoted strings to interpolate undef variables as an empty string. This is the behavior present in 0.25.x.
* [#4270] Force inherited classes to load into the correct environmentJesse Wolfe2010-07-192-5/+26
| | | | | | | | | Parent classes were getting searched for in a way that fails if they were not already loaded into an environment. This patch replaces that codepath with a call that will load them if they are needed. This bug was masked by another bug that loads all classes into "production", whether they are used there or not.
* [#4287] Fix the undefined evaluate_match error when comparing functionsMatt Robinson2010-07-192-57/+70
| | | | | | | | | | | | | | Ticket #4238 introduced a problem that a function couldn't compare to another value until after it was evaluated, and AST::Function didn't have the evaluate_match method. This change moves that method from AST::Leaf to AST. The special casing necessary for doing comparisons between AST objects feels messy and could probably be encapsulated better. I've created ticket #4291 to remind us to refactor this at some point. Paired with: Nick Lewis Signed-off-by: Matt Robinson <matt@puppetlabs.com>
* [#4233] Ruby regexps are not multiline by default, but Resource titles can ↵Jesse Wolfe2010-07-183-0/+44
| | | | | | | | be multiline Puppet allows resource titles to contain newlines. We recently introduced several regexps that were failing on resources with multiline titles.
* Fix for #4236 -- Only interpolate $ if followed by a variableMarkus Roberts2010-07-181-1/+7
| | | | | | | | | | | | | | | | | | This is a modification of the Nick/Jesse/Matt patch, retaining their tests and the analysis of the problem but reversing the implementation direction of the solution. Rather than trying to make the already somewhat brittle slurpstring smarter, which requires telling it what following strings will be accepted by the caller with a zero-width-lookahead negation of the regular expression used to extract a variable name, this patch keeps that responsibility in the caller where it belongs. The caller (tokenize_interpolated_string) now checks to see if it got a variable name _before_ emitting a variable token; if it got one, it proceeds normally, but if it didn't it simply tries again from that point in the string (accumulating the false match as a prefix). This change actually simplifies the logic of tokenize_interpolated_string somewhat.
* Fix #4238 - if should match undef as ''Brice Figureau2010-07-182-24/+69
| | | | | | | | | | | | | | The comparisons operator (and more particularly == and !=) were not treating the undef value as '', like case and selector did since #2818. This patch makes sure comparison operator uses AST leaf matching. Unfortunately, doing this introduces a behavior change compared to the previous versions: Numbers embedded in strings will now be matched as numbers in case and selector statements instead of string matching. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Minimal fix for #4243 -- import isn't thread safeMarkus Roberts2010-07-181-13/+13
| | | | | | | | The import function was calling type_loader#import directly so that it could pass in the current file name, but by doing so it was thwarting the thread- safety locking level. This patch rearanges things so that all imports go through the same (thread safe) code path while retaining the current_file passing, error handling, etc. from the old structure.
* [#4247] storeconfigs was calling Puppet::Parser::Resource.new with the wrong ↵Jesse Wolfe2010-07-182-0/+22
| | | | | | | | | | | | | arguments When the interface to Puppet::Resource changed, its subclass Puppet::Parser::Resource was also affected. One case of initializing those objects did not get updated when the code changed, causing storeconfigs to break. Also, this patch adds a error message that would have made it easier to catch this problem (as puppet could consume all memory and die trying to print the old error message)
* [#4256] External nodes parameters can now be assigned to nodesMatt Robinson2010-07-181-4/+5
| | | | | | | | | | | | | | | | | | Node parameters were made a reader instead of an accessor in commit b82b4ef04282ca0006931562f60459a1591b6268 Author: Luke Kanies <luke@reductivelabs.com> Date: Wed Jan 6 17:42:42 2010 -0800 All non-transient parser references are gone but external nodes needs to be able to assign to parameters. The fix is just to change that back to an accessor. There may have been concern over nodes replacing the hash object instead of the values could have bad consequences, but that's not a concern since the node object being created in this case is new also. Paired with: Nick Lewis
* Fix #4262 - Puppetmaster used to log compilation timeBrice Figureau2010-07-181-0/+10
| | | | | | | It looks like a merge went wrong and we were returning abruptely from a benchmark block, thus jumping over a precious log information. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Partial fix for #4278 -- the performance aspectsMarkus Roberts2010-07-181-1/+1
| | | | | | | | | unevaluated_resources was a performance bottleneck and was doing a great deal of unneeded work, such as searching for the type of evaluated resources before ignoring them because only unevaluated resources were wanted. This patch is behaviour neutral but gives a 2-3x speedup for compiles with many defined resources.
* [#4213] -o option for setting onetime now works properlyNick Lewis2010-07-131-28/+12
| | | | | | | | When onetime was moved to global defaults, it broke the option handler using it in agent to manage waitforcert length. Additionally, it caused --onetime and -o to behave differently. This patch removes the ordinary option handler defined in agent and moves the logic for waitforcert to the one location it's used.
* [#3656] Serializing arrays of referencesJesse Wolfe2010-07-131-0/+7
| | | | | | My previous fix for #3656 missed the case where a "require" attribute (or other graph-ish attribute) had multiple values. This patch generalizes that fix to the multiple-value case.
* [#4215] Have rundir depend on vardirMatt Robinson2010-07-131-0/+51
| | | | | | | | | | | | This came up because if you ran puppetd with a specific vardir, then when rundir got set to a hardcoded value its parent directory might not exist and the whole thing would fail. This change came about with the concept of run_mode, and this fix is restoring the behaviour that was in 0.25.x Reviewed-by: Jesse Wolfe Signed-off-by: Matt Robinson <matt@puppetlabs.com>
* Fix #4206 - import "path/*" tries to import files twiceBrice Figureau2010-07-111-0/+6
| | | | | | | | | Due to the glob pattern used, we are trying to import manifests twice. Since it isn't possible (see #4205), it is not possible to use a pattern in an import statement. This patch makes sure manifests are returned only once. Signed-off-by: Brice Figureau <brice-puppet@daysofwonder.com>
* Code smell: Two space indentationMarkus Roberts2010-07-09401-46365/+46365
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replaced 106806 occurances of ^( +)(.*$) with The ruby community almost universally (i.e. everyone but Luke, Markus, and the other eleven people who learned ruby in the 1900s) uses two-space indentation. 3 Examples: The code: end # Tell getopt which arguments are valid def test_get_getopt_args element = Setting.new :name => "foo", :desc => "anything", :settings => Puppet::Util::Settings.new assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args") becomes: end # Tell getopt which arguments are valid def test_get_getopt_args element = Setting.new :name => "foo", :desc => "anything", :settings => Puppet::Util::Settings.new assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args") The code: assert_equal(str, val) assert_instance_of(Float, result) end # Now test it with a passed object becomes: assert_equal(str, val) assert_instance_of(Float, result) end # Now test it with a passed object The code: end assert_nothing_raised do klass[:Yay] = "boo" klass["Cool"] = :yayness end becomes: end assert_nothing_raised do klass[:Yay] = "boo" klass["Cool"] = :yayness end
* Code smell: Avoid needless decorationsMarkus Roberts2010-07-0967-148/+148
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Replaced 704 occurances of (.*)\b([a-z_]+)\(\) with \1\2 3 Examples: The code: ctx = OpenSSL::SSL::SSLContext.new() becomes: ctx = OpenSSL::SSL::SSLContext.new The code: skip() becomes: skip The code: path = tempfile() becomes: path = tempfile * Replaced 31 occurances of ^( *)end *#.* with \1end 3 Examples: The code: becomes: The code: end # Dir.foreach becomes: end The code: end # def becomes: end
* Code smell: Avoid explicit returnsMarkus Roberts2010-07-093-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Replaced 583 occurances of (DEF) (LINES) return (.*) end with 3 Examples: The code: def consolidate_failures(failed) filters = Hash.new { |h,k| h[k] = [] } failed.each do |spec, failed_trace| if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } filters[f] << spec break end end return filters end becomes: def consolidate_failures(failed) filters = Hash.new { |h,k| h[k] = [] } failed.each do |spec, failed_trace| if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } filters[f] << spec break end end filters end The code: def retrieve return_value = super return_value = return_value[0] if return_value && return_value.is_a?(Array) return return_value end becomes: def retrieve return_value = super return_value = return_value[0] if return_value && return_value.is_a?(Array) return_value end The code: def fake_fstab os = Facter['operatingsystem'] if os == "Solaris" name = "solaris.fstab" elsif os == "FreeBSD" name = "freebsd.fstab" else # Catchall for other fstabs name = "linux.fstab" end oldpath = @provider_class.default_target return fakefile(File::join("data/types/mount", name)) end becomes: def fake_fstab os = Facter['operatingsystem'] if os == "Solaris" name = "solaris.fstab" elsif os == "FreeBSD" name = "freebsd.fstab" else # Catchall for other fstabs name = "linux.fstab" end oldpath = @provider_class.default_target fakefile(File::join("data/types/mount", name)) end
* Code smell: Line modifiers are preferred to one-line blocks.Markus Roberts2010-07-094-12/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Replaced 6 occurances of (while .*?) *do$ with The do is unneeded in the block header form and causes problems with the block-to-one-line transformation. 3 Examples: The code: while line = f.gets do becomes: while line = f.gets The code: while line = shadow.gets do becomes: while line = shadow.gets The code: while wrapper = zeros.pop do becomes: while wrapper = zeros.pop * Replaced 19 occurances of ((if|unless) .*?) *then$ with The then is unneeded in the block header form and causes problems with the block-to-one-line transformation. 3 Examples: The code: if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } then becomes: if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) } The code: unless defined?(@spec_command) then becomes: unless defined?(@spec_command) The code: if c == ?\n then becomes: if c == ?\n * Replaced 758 occurances of ((?:if|unless|while|until) .*) (.*) end with The one-line form is preferable provided: * The condition is not used to assign a variable * The body line is not already modified * The resulting line is not too long 3 Examples: The code: if Puppet.features.libshadow? has_feature :manages_passwords end becomes: has_feature :manages_passwords if Puppet.features.libshadow? The code: unless (defined?(@current_pool) and @current_pool) @current_pool = process_zpool_data(get_pool_data) end becomes: @current_pool = process_zpool_data(get_pool_data) unless (defined?(@current_pool) and @current_pool) The code: if Puppet[:trace] puts detail.backtrace end becomes: puts detail.backtrace if Puppet[:trace]