#!/usr/bin/perl -w
#
#  Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
#

use strict;
use File::Basename;

# returns numbers with a normal distribution
sub normal {
  my($mean) = $_[0];
  my($stddev) = $_[1];
  
  my $x = -6.0;
  for (my $i = 0; $i < 12; $i++) {
    $x += rand;
  }
  
  $x = $mean + $stddev * $x;
  return $x;
}

# location of fill2
my $fill2="./src/fill2";

# for each file attach a random number of attributes
# each filled with a random amount of data
# attribute name is the checksum of the data stored within
# the attribute

my $status = 0;			# return status
my $file;

while (<>) {
  
  chomp($file = $_);
  die("Error: $0: $file not found\n") if ( ! -e $file);
  
  if ($0 =~ /fill2attr$/) {

    # attach attributes to this file
    my $num = abs(int(normal(3, 1)));
    my $seed = 1;
    my $verbose = 1;
    my $tmp = "/tmp/fill2attr$$";
    
    for (my $i = 0; $i < $num; $i++) {
      my $size = abs(int(normal(256, 200)));
      my $cmd = "$fill2 -d nbytes=$size,linelength=72,seed=$seed -b 4k $tmp";
      $cmd .= " > /dev/null 2>&1" if (! $verbose);
      
      if (system($cmd) != 0) {
	die("Error $0: can't create $tmp\n");
      }
      
      chomp($_ = `sum -r $tmp`);
      my ($sum) = split(/\s+/);
      system("cat $tmp | attr -s $sum $file > /dev/null");
      system("rm $tmp");
    }
  }
  elsif ($0 =~ /fill2attr_check/) {

    # get the attributes for this file
    my $cmd = "attr -q -l $file |";
    open LIST, $cmd;
    my @labels = <LIST>;
    close LIST or die("Error listing attributes: $!");
    chomp(@labels);

    # check attribute contents
    foreach my $label (@labels) {
      my $sum;
      ($sum) = split(/\s+/, `attr -q -g $label $file | sum -r`);
      if ($sum ne $label) {
	warn("Attribute \"$label\" does not match " .
	     "attribute contents for file $file\n");
	$status = 1;
      }
    }
  }
}

exit($status);
