diff options
| author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-02-08 02:22:57 +0000 |
|---|---|---|
| committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2007-02-08 02:22:57 +0000 |
| commit | a216df2bcb304ad379e152f2f59ef7d942f54f3b (patch) | |
| tree | eef3289c588cf44373fe959619d732c5a05ab7b5 /test/network/server/server.rb | |
| parent | 7e07e3dc843798bdbc7a03428ca054adaff2fb72 (diff) | |
Okay, last file moves for the night. The test code has been moved to match the lib directory, and I have moved a couple of things into network/ instead of network/server, since they did not belong as much.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@2180 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'test/network/server/server.rb')
| -rwxr-xr-x | test/network/server/server.rb | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/test/network/server/server.rb b/test/network/server/server.rb new file mode 100755 index 000000000..3e5e7b717 --- /dev/null +++ b/test/network/server/server.rb @@ -0,0 +1,197 @@ +#!/usr/bin/env ruby + +$:.unshift("../../lib") if __FILE__ =~ /\.rb$/ + +require 'puppettest' +require 'puppet/network/server' + +if ARGV.length > 0 and ARGV[0] == "short" + $short = true +else + $short = false +end + +class TestServer < Test::Unit::TestCase + include PuppetTest::ServerTest + + # test that we can connect to the server + # we have to use fork here, because we apparently can't use threads + # to talk to other threads + def test_connect_with_fork + Puppet[:autosign] = true + serverpid, server = mk_status_server + + # create a status client, and verify it can talk + client = mk_status_client + + retval = nil + assert_nothing_raised() { + retval = client.status + } + assert_equal(1, retval) + end + + # similar to the last test, but this time actually run getconfig + def test_getconfig_with_fork + Puppet[:autosign] = true + serverpid = nil + + file = mktestmanifest() + + server = nil + # make our server again + assert_nothing_raised() { + server = Puppet::Network::Server.new( + :Port => @@port, + :Handlers => { + :CA => {}, # so that certs autogenerate + :Master => { + :UseNodes => false, + :Manifest => file + }, + :Status => nil + } + ) + + } + serverpid = fork { + assert_nothing_raised() { + #trap(:INT) { server.shutdown; Kernel.exit! } + trap(:INT) { server.shutdown } + server.start + } + } + @@tmppids << serverpid + + client = nil + + # and then start a masterclient + assert_nothing_raised() { + client = Puppet::Network::Client::MasterClient.new( + :Server => "localhost", + :Port => @@port + ) + } + retval = nil + + # and run getconfig a couple of times + assert_nothing_raised() { + retval = client.getconfig + } + + # Try it again, just for kicks + assert_nothing_raised() { + retval = client.getconfig + } + end + + def test_setpidfile_setting + Puppet[:setpidfile] = false + server = nil + assert_nothing_raised() { + server = Puppet::Network::Server.new( + :Port => @@port, + :Handlers => { + :CA => {}, # so that certs autogenerate + :Status => nil + } + ) + + } + + assert_nothing_raised { + server.setpidfile + } + + assert(! FileTest.exists?(server.pidfile), "PID file was created") + Puppet[:setpidfile] = true + + assert_nothing_raised { + server.setpidfile + } + assert(FileTest.exists?(server.pidfile), "PID file was not created") + end + + + # Test that a client whose cert has been revoked really can't connect + def test_certificate_revocation + Puppet[:autosign] = true + + serverpid, server = mk_status_server + + client = mk_status_client + + status = nil + assert_nothing_raised() { + status = client.status + } + assert_equal(1, status) + client.shutdown + + # Revoke the client's cert + ca = Puppet::SSLCertificates::CA.new() + fqdn = client.fqdn + ca.revoke(ca.getclientcert(fqdn)[0].serial) + + # Restart the server + @@port += 1 + Puppet[:autosign] = false + kill_and_wait(serverpid, server.pidfile) + serverpid, server = mk_status_server + + client = mk_status_client + # This time the client should be denied + assert_raise(Puppet::Network::NetworkClientError) { + client.status + } + end + + def mk_status_client + client = nil + # Otherwise, the client initalization will trip over itself + # since elements created in the last run are still around + Puppet::Type::allclear + + assert_nothing_raised() { + client = Puppet::Network::Client::StatusClient.new( + :Server => "localhost", + :Port => @@port + ) + } + client + end + + def mk_status_server + server = nil + assert_nothing_raised() { + server = Puppet::Network::Server.new( + :Port => @@port, + :Handlers => { + :CA => {}, # so that certs autogenerate + :Status => nil + } + ) + + } + pid = fork { + assert_nothing_raised() { + trap(:INT) { server.shutdown } + server.start + } + } + @@tmppids << pid + [pid, server] + end + + def kill_and_wait(pid, file) + %x{kill -INT #{pid} 2>/dev/null} + count = 0 + while count < 30 && File::exist?(file) + count += 1 + sleep(1) + end + assert(count < 30, "Killing server #{pid} failed") + end +end + +# $Id$ |
