1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
#!/usr/bin/env ruby
$:.unshift("../../lib") if __FILE__ =~ /\.rb$/
require 'puppettest'
require 'puppet/network/handler/logger'
require 'base64'
require 'cgi'
class TestLogger < Test::Unit::TestCase
include PuppetTest::ServerTest
def setup
super
# Send the logs to an array, yo.
Puppet::Util::Log.close
@logs = []
Puppet::Util::Log.newdestination @logs
end
# Test the log driver manually
def test_localaddlog
logger = nil
assert_nothing_raised {
logger = Puppet::Network::Handler.logger.new
}
msg = nil
assert_nothing_raised {
msg = Puppet::Util::Log.create(
:level => :warning,
:message => "This is a message"
)
}
assert_nothing_raised {
logger.addlog(msg)
}
end
# Test it while replicating a remote client
def test_remoteaddlog
logger = nil
assert_nothing_raised {
logger = Puppet::Network::Handler.logger.new
}
msg = nil
assert_nothing_raised {
msg = Puppet::Util::Log.create(
:level => :warning,
:message => "This is a remote message"
)
}
assert_nothing_raised {
msg = CGI.escape(YAML.dump(msg))
}
assert_nothing_raised {
logger.addlog(msg, "localhost", "127.0.0.1")
}
end
# Now test it with a real client and server, but not remote
def test_localclient
client = nil
assert_nothing_raised {
client = Puppet::Network::Client.logger.new(:Logger => true)
}
msg = nil
assert_nothing_raised {
msg = Puppet::Util::Log.create(
:level => :warning,
:message => "This is a logclient message"
)
}
msg = CGI.escape(YAML.dump(msg))
assert_nothing_raised {
client.addlog(msg, "localhost", "127.0.0.1")
}
end
# And now test over the network
# This test is disabled, since it doesn't work well and it's not the right
# solution anyway.
def disabled_test_logclient
pid = nil
clientlog = tempfile()
serverlog = tempfile()
Puppet.warning "serverlog is %s" % serverlog
Puppet::Util::Log.newdestination clientlog
Puppet::Util::Log.close(:syslog)
# For testing
Puppet[:autosign] = true
logger = nil
# Create our server
assert_nothing_raised {
logger = Puppet::Network::Server.new(
:Port => @@port,
:Handlers => {
:CA => {}, # so that certs autogenerate
:Logger => {}
}
)
}
# Start our server
serverpid = fork {
Puppet::Util::Log.close(clientlog)
Puppet::Util::Log.newdestination serverlog
assert_nothing_raised() {
trap(:INT) { logger.shutdown }
logger.start
}
}
@@tmppids << serverpid
sleep(0.5)
# Start a raw xmlrpc client
client = nil
assert_nothing_raised() {
client = Puppet::Network::Client.logger.new(
:Server => "localhost",
:Port => @@port
)
unless client.readcert
raise "Could not get certs"
end
}
retval = nil
{
:notice => "XMLRPC1",
:warning => "XMLRPC2",
:err => "XMLRPC3"
}.each { |level, str|
msg = CGI.escape(YAML.dump(Puppet::Util::Log.create(
:level => level,
:message => str
)))
assert_nothing_raised {
retval = client.addlog(msg)
}
}
# and now use the normal client action
# Set the log destination to be the server
Puppet::Util::Log.newdestination "localhost:%s" % @@port
# And now do some logging
assert_nothing_raised {
Puppet.notice "TEST1"
Puppet.warning "TEST2"
Puppet.err "TEST3"
}
assert_nothing_raised {
Process.kill("INT", serverpid)
}
assert(FileTest.exists?(serverlog), "Server log does not exist")
# Give it a bit to flush to disk
sleep(0.5)
content = nil
assert_nothing_raised {
content = File.read(serverlog)
}
%w{TEST1 TEST2 TEST3}.each { |str|
assert(content =~ %r{#{str}}, "Content does not match %s" % str)
}
end
end
# $Id$
|