~ubuntu-branches/ubuntu/saucy/munin/saucy

« back to all changes in this revision

Viewing changes to node/t/munin_node_spoolreader.t

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-06-11 12:54:28 UTC
  • mfrom: (8.1.30 sid)
  • Revision ID: package-import@ubuntu.com-20120611125428-k8z25s77rp755vxe
Tags: 2.0.0-1ubuntu1
* Resync with Debian unstable.
* d/munin-node.upstart,munin.upstart: Add upstart configurations.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# vim: sw=4 : ts=4 : et
 
2
use warnings;
 
3
use strict;
 
4
 
 
5
use Test::More tests => 22;
 
6
use Test::LongString;
 
7
 
 
8
use POSIX ();
 
9
use File::Temp qw( tempdir );
 
10
use Data::Dumper;
 
11
use File::Slurp;
 
12
 
 
13
use Munin::Node::SpoolReader;
 
14
use Munin::Node::SpoolWriter;
 
15
 
 
16
 
 
17
### new
 
18
{
 
19
    my $dir = POSIX::getcwd();
 
20
 
 
21
    my $writer = new_ok('Munin::Node::SpoolReader' => [
 
22
        spooldir => $dir,
 
23
    ], 'spooldir provided to constructor');
 
24
 
 
25
    is($writer->{spooldir}, $dir, 'spooldir key is set');
 
26
    isa_ok($writer->{spooldirhandle}, 'GLOB', 'spooldirhandle is a glob');
 
27
}
 
28
{
 
29
    eval { Munin::Node::SpoolReader->new(fnord => 'blort') };
 
30
    like($@, qr/./, 'Dies if no spooldir provided');
 
31
}
 
32
 
 
33
 
 
34
### fetch
 
35
{
 
36
    my $dir = tempdir(CLEANUP => 1);
 
37
    my $writer = Munin::Node::SpoolWriter->new(spooldir => $dir);
 
38
    my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
39
 
 
40
    # write some data
 
41
    $writer->write(1234567890, 'fnord', [
 
42
        'graph_title CPU usage',
 
43
        'system.label system',
 
44
        'system.value 1',
 
45
    ]);
 
46
 
 
47
    $writer->write(1234567900, 'fnord', [
 
48
        'graph_title CPU usage',
 
49
        'system.label system',
 
50
        'system.value 2',
 
51
    ]);
 
52
 
 
53
    $writer->write(1234567910, 'fnord', [
 
54
        'graph_title CPU usage',
 
55
        'system.label system',
 
56
        'system.value 3',
 
57
    ]);
 
58
 
 
59
    is_string($reader->fetch(1234567899), <<EOS, 'Fetched data since the write');
 
60
multigraph fnord
 
61
graph_title CPU usage
 
62
system.label system
 
63
system.value 1234567900:2
 
64
multigraph fnord
 
65
graph_title CPU usage
 
66
system.label system
 
67
system.value 1234567910:3
 
68
EOS
 
69
 
 
70
    is_string($reader->fetch(1234567900), <<EOS, 'Start timestamp is not inclusive');
 
71
multigraph fnord
 
72
graph_title CPU usage
 
73
system.label system
 
74
system.value 1234567910:3
 
75
EOS
 
76
 
 
77
    is_string($reader->fetch(1), <<EOS, 'Timestamp predates all result: all results are returned');
 
78
multigraph fnord
 
79
graph_title CPU usage
 
80
system.label system
 
81
system.value 1234567890:1
 
82
multigraph fnord
 
83
graph_title CPU usage
 
84
system.label system
 
85
system.value 1234567900:2
 
86
multigraph fnord
 
87
graph_title CPU usage
 
88
system.label system
 
89
system.value 1234567910:3
 
90
EOS
 
91
 
 
92
    is_string($reader->fetch(1234567999), '', 'Timestamp postdates the last result: empty string');
 
93
}
 
94
{
 
95
    my $dir = tempdir(CLEANUP => 1);
 
96
    my $writer = Munin::Node::SpoolWriter->new(spooldir => $dir);
 
97
    my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
98
 
 
99
    # write some data
 
100
    $writer->write(1234567890, 'fnord', [
 
101
        'graph_title CPU usage',
 
102
        'system.label system',
 
103
        '',
 
104
        'system.value 1',
 
105
        '',
 
106
    ]);
 
107
 
 
108
    is_string($reader->fetch(1), <<EOS, 'Blank lines are ignored');
 
109
multigraph fnord
 
110
graph_title CPU usage
 
111
system.label system
 
112
system.value 1234567890:1
 
113
EOS
 
114
 
 
115
}
 
116
{
 
117
    my $dir = tempdir(CLEANUP => 1);
 
118
    my $writer = Munin::Node::SpoolWriter->new(spooldir => $dir);
 
119
    my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
120
 
 
121
    # write results for two different plugins
 
122
    $writer->write(1234567890, 'fnord', [
 
123
        'graph_title CPU usage',
 
124
        'system.label system',
 
125
        'system.value 3',
 
126
    ]);
 
127
 
 
128
    $writer->write(1234567910, 'blort', [
 
129
        'graph_title Memory usage',
 
130
        'slab.label slab',
 
131
        'slab.value 123',
 
132
    ]);
 
133
 
 
134
    ok(my $fetched = $reader->fetch(1234567800), 'Several services to fetch');
 
135
 
 
136
    my $f1 = <<EOT;
 
137
multigraph fnord
 
138
graph_title CPU usage
 
139
system.label system
 
140
system.value 1234567890:3
 
141
EOT
 
142
    my $f2 = <<EOT;
 
143
multigraph blort
 
144
graph_title Memory usage
 
145
slab.label slab
 
146
slab.value 1234567910:123
 
147
EOT
 
148
    like($fetched, qr(\A$f1$f2|$f2$f1\Z)m, 'Got results for both services, in either order, and nothing else');
 
149
 
 
150
 
 
151
    is($reader->fetch(1234567900), <<EOS, 'Several plugins to fetch, but only one is recent enough');
 
152
multigraph blort
 
153
graph_title Memory usage
 
154
slab.label slab
 
155
slab.value 1234567910:123
 
156
EOS
 
157
 
 
158
}
 
159
{
 
160
    my $dir = tempdir(CLEANUP => 1);
 
161
    my $writer = Munin::Node::SpoolWriter->new(spooldir => $dir);
 
162
    my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
163
 
 
164
    # write two sets of results, with a slightly different config
 
165
    $writer->write(1234567890, 'fnord', [
 
166
        'graph_title CPU usage',
 
167
        'system.label system',
 
168
        'system.value 3',
 
169
    ]);
 
170
 
 
171
    $writer->write(1234567990, 'fnord', [
 
172
        'graph_title CPU usage!',  # this line has changed
 
173
        'system.label system',
 
174
        'system.value 4',
 
175
    ]);
 
176
 
 
177
    ok(my $fetched = $reader->fetch(1234567800), 'Several sets of results to fetch');
 
178
 
 
179
    my $f1 = <<EOT;
 
180
multigraph fnord
 
181
graph_title CPU usage
 
182
system.label system
 
183
system.value 1234567890:3
 
184
EOT
 
185
    my $f2 = <<EOT;
 
186
multigraph fnord
 
187
graph_title CPU usage!
 
188
system.label system
 
189
system.value 1234567990:4
 
190
EOT
 
191
    like($fetched, qr(\A$f1$f2|$f2$f1\Z)m, 'Got results for both services, in either order, and nothing else');
 
192
}
 
193
 
 
194
 
 
195
### _get_spooled_plugins
 
196
### list
 
197
{
 
198
    my $dir = tempdir(CLEANUP => 1);
 
199
    my $writer = Munin::Node::SpoolWriter->new(spooldir => $dir);
 
200
    my $reader = Munin::Node::SpoolReader->new(spooldir => $dir);
 
201
 
 
202
    is_deeply([ sort $reader->_get_spooled_plugins ], [], 'No spooled plugins to list');
 
203
    is($reader->list, "\n", 'No spooled plugins to list');
 
204
 
 
205
    # write "results" for several plugins
 
206
    $writer->write(1234567890, 'fnord', [
 
207
        'graph_title CPU usage',
 
208
        'system.label system',
 
209
        'system.value 1',
 
210
    ]);
 
211
    $writer->write(1234567890, 'floop', [
 
212
        'graph_title Memory usage',
 
213
        'system.label system',
 
214
        'system.value 3.14',
 
215
    ]);
 
216
    $writer->write(1234567890, 'blort', [
 
217
        'graph_title Flux capacitance',
 
218
        'system.label system',
 
219
        'system.value -4',
 
220
    ]);
 
221
    $writer->write(1334567890, 'blort', [
 
222
        'graph_title Flux capacitance',
 
223
        'system.label system',
 
224
        'system.value -4',
 
225
    ]);
 
226
 
 
227
    open my $cruft, '>', "$dir/cruft" or die "Unable to create cruft file: $!";
 
228
    print $cruft "rubbish\n";
 
229
    close $cruft;
 
230
 
 
231
    is_deeply([ sort $reader->_get_spooled_plugins ], [ sort qw( fnord floop blort ) ], 'Retrieved list of spooled plugins');
 
232
    is($reader->list, "blort floop fnord\n", 'Retrieved stringified list of spooled plugins');
 
233
}
 
234
 
 
235
 
 
236
### _snap_to_epoch_boundary
 
237
# NOTE the two versions of this sub absolutely need to be kept in sync,
 
238
# otherwise things will break in subtle and horrible ways...
 
239
{
 
240
    my @tests = (
 
241
        #  timestamp, epoch
 
242
        [ 1310987426, 1310947200 ],
 
243
        [ 1234567890, 1234483200 ],
 
244
    );
 
245
 
 
246
    # both need to provide the same answer!
 
247
    foreach my $t (@tests) {
 
248
        is(Munin::Node::SpoolReader::_snap_to_epoch_boundary($t->[0]), $t->[1]);
 
249
        is(Munin::Node::SpoolWriter::_snap_to_epoch_boundary($t->[0]), $t->[1]);
 
250
    }
 
251
}
 
252