r266@brr: dpavlin | 2007-11-25 19:50:35 +0100
[perl-cwmp.git] / t / 10-request.t
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 my $debug = shift @ARGV;
6
7 use Test::More tests => 73;
8 use Data::Dump qw/dump/;
9 use Cwd qw/abs_path/;
10 use File::Slurp;
11 use blib;
12
13 #use Devel::LeakTrace::Fast;
14
15 BEGIN {
16         use_ok('CWMP::Request');
17 }
18
19 my @models = ( qw/SpeedTouch-706 SpeedTouch-780/ );
20
21 ok( $#models + 1, 'got models' );
22
23 ok(my $abs_path = abs_path($0), "abs_path");
24 $abs_path =~ s!/[^/]*$!/!;      #!fix-vim
25
26 my $path2method;
27 my $triggers_count;
28
29 sub file_is_deeply {
30         my ( $path ) = @_;
31
32         ok( my $xml = read_file( $path ), "read_file( $path )" );
33
34         diag $xml if $debug;
35
36         ok( my $trigger = $path2method->{$path}, "path2method($path)" );
37
38         CWMP::Request->add_trigger( name => $trigger, callback => sub {
39                 my ( $self, $state ) = @_;
40                 $triggers_count->{$trigger}++;
41                 ok( $state, "called trigger $trigger" );
42         });
43
44         ok( my $state = CWMP::Request->parse( $xml ), 'parse' );
45
46         my $dump_path = $path;
47         $dump_path =~ s/\.xml/\.pl/;
48
49         write_file( $dump_path, dump( $state ) ) unless ( -e $dump_path );
50
51         diag "$path ? $dump_path" if $debug;
52
53         ok( my $hash = read_file( $dump_path ), "read_file( $dump_path )" );
54         ok ( $hash = eval "$hash", 'eval' );
55
56         is_deeply( $state, $hash, 'same' );
57 }
58
59 foreach my $model ( @models ) {
60
61         my $dir = "$abs_path/$model/";
62         opendir(DIR, $dir) || die "can't opendir $dir: $!";
63         my @xmls = map {
64                 my $path = "$dir/$_";
65                 my $method = $_;
66                 $method =~ s/\.xml$//;
67                 $path2method->{$path} = $method;
68                 $path;
69         } grep { /\.xml$/ && -f "$dir/$_" } readdir(DIR);
70         closedir DIR;
71
72         diag "$model has ", $#xmls + 1, " xml tests";
73
74         ok( $#xmls, "xmls" );
75
76         foreach my $xml_path ( @xmls ) {
77                 ok ( $xml_path, 'xml path' );
78                 file_is_deeply( $xml_path );
79         }
80 }
81
82 diag "triggers_count = ",dump( $triggers_count ) if $debug;
83