dmake: do not set MAKEFLAGS=k
[unleashed/tickless.git] / usr / src / cmd / perl / contrib / Sun / Solaris / Kstat / t / Kstat.t
blob8d1f92c9cdd88e1980517a6f72956989ec5907a4
2 # Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
3 # Use is subject to license terms.
5 # CDDL HEADER START
7 # The contents of this file are subject to the terms of the
8 # Common Development and Distribution License, Version 1.0 only
9 # (the "License").  You may not use this file except in compliance
10 # with the License.
12 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
13 # or http://www.opensolaris.org/os/licensing.
14 # See the License for the specific language governing permissions
15 # and limitations under the License.
17 # When distributing Covered Code, include this CDDL HEADER in each
18 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
19 # If applicable, add the following below this CDDL HEADER, with the
20 # fields enclosed by brackets "[]" replaced with your own identifying
21 # information: Portions Copyright [yyyy] [name of copyright owner]
23 # CDDL HEADER END
25 #ident  "%Z%%M% %I%     %E% SMI"
27 # test script for Sun::Solaris::Kstat
30 use strict;
32 # Visit all the leaf nodes -
33 # will generate a die if there are any structure mismatches
34 sub visit_all($)
36         my ($ks) = @_;
37         foreach my $m (sort(keys(%$ks))) {
38                 foreach my $i (sort(keys(%{$ks->{$m}}))) {
39                         foreach my $n (sort(keys(%{$ks->{$m}->{$i}}))) {
40                                 foreach my $k (sort(
41                                     keys(%{$ks->{$m}->{$i}->{$n}}))) {
42                                         my $v = $ks->{$m}->{$i}->{$n}->{$k};
43                                 }
44                         }
45                 }
46         }
47         return(1);
50 BEGIN { $| = 1; print "1..15\n"; }
51 my $loaded;
52 END {print "not ok 1\n" unless $loaded;}
53 use Sun::Solaris::Kstat;
54 $loaded = 1;
55 print "ok 1\n";
57 # Check we can create a Kstat object OK
58 my ($test, $ks);
59 $test = 2;
60 if (! eval { $ks = Sun::Solaris::Kstat->new() }) {
61         print("not ok $test: $@");
62 } else {
63         print("ok $test\n");
65 $test++;
67 # Check FIRSTKEY/NEXTKEY/FETCH and for structure mismatches
68 if (! eval { visit_all($ks) }) {
69         print("not ok $test: $@");
70 } else {
71         print("ok $test\n");
73 $test++;
75 # Find a cpu number
76 my $cpu = (keys(%{$ks->{cpu_info}}))[0];
77 my $cpu_info = "cpu_info$cpu";
79 # Check EXISTS
80 if (exists($ks->{cpu_info}{$cpu}{$cpu_info}{state})) {
81         print("ok $test\n");
82 } else {
83         print("not ok $test\n");
85 $test++;
87 # Check DELETE
88 my $val = delete($ks->{cpu_info}{$cpu}{$cpu_info}{state});
89 if (defined($val) && ($val =~ /^on-line/ || $val =~ /^off-line/)) {
90         print("ok $test\n");
91 } else {
92         print("not ok $test ($val)\n");
94 $test++;
96 # 5.004_04 has a broken hv_delete
97 if ($] < 5.00405) {
98         print("ok $test\n");
99         $test++;
100         print("ok $test\n");
101         $test++;
102 } else {
103         if (! exists($ks->{cpu_info}{$cpu}{$cpu_info}{state})) {
104                 print("ok $test\n");
105         } else {
106                 print("not ok $test\n");
107         }
108         $test++;
109         $val = $ks->{cpu_info}{$cpu}{$cpu_info}{state};
110         if (! defined($val)) {
111                 print("ok $test\n");
112         } else {
113                 print("not ok $test\n");
114         }
115         $test++;
118 # Check STORE
119 $ks->{cpu_info}{$cpu}{$cpu_info}{state} = "california";
120 if ($ks->{cpu_info}{$cpu}{$cpu_info}{state} eq "california") {
121         print("ok $test\n");
122 } else {
123         print("not ok $test\n");
125 $test++;
127 # Check CLEAR
128 my @bvals = sort(keys(%{$ks->{cpu_info}{$cpu}{$cpu_info}}));
129 %{$ks->{cpu_info}{$cpu}{$cpu_info}} = ();
130 my @avals = sort(keys(%{$ks->{cpu_info}{$cpu}{$cpu_info}}));
131 while (@bvals || @avals) {
132         my $a = shift(@avals);
133         my $b = shift(@bvals);
134         if ($a ne $b) { print("not ok $test ($a ne $b)\n"); last; }
136 print("ok $test\n") if (! @avals && ! @bvals);
137 $test++;
139 # Check updates
140 if (! defined(eval { $ks->update() })) {
141         print("not ok $test: $@");
142 } else {
143         print("ok $test\n");
145 $test++;
147 # Check readonly-ness of hash structure
148 eval { $ks->{cpu_info}{$cpu}{$cpu_info} = {}; };
149 print($@ =~ /^Modification of a read-only/i ? "ok $test\n" : "not ok $test\n");
150 $test++;
152 eval { $ks->{cpu_info}{$cpu} = {}; };
153 print($@ =~ /^Modification of a read-only/i ? "ok $test\n" : "not ok $test\n");
154 $test++;
156 eval { $ks->{cpu_info} = {}; };
157 print($@ =~ /^Modification of a read-only/i ? "ok $test\n" : "not ok $test\n");
158 $test++;
160 # Check timestamps
161 my $then = $ks->{cpu_info}{$cpu}{$cpu_info}{snaptime};
162 sleep(3);
163 if (! defined(eval { $ks->update() })) {
164         print("not ok $test: $@");
165 } else {
166         print("ok $test\n");
168 $test++;
169 my $interval = $ks->{cpu_info}{$cpu}{$cpu_info}{snaptime} - $then;
170 if ($interval >= 2.5 && $interval <= 3.5) {
171         print("ok $test\n");
172 } else {
173         print("not ok $test\n");
175 $test++;
177 exit(0);