#!/usr/bin/expect --
# global definitions

source includes/config/globals.def
source includes/config/framework.conf

################################
set VERSION "\$Id: framework,v 1.1 2004/06/30 16:24:21 danjones Exp $"
################################

if { [ catch {puts $env(NOTIFY)} ] } {
                set NOTIFY 0
                puts "No NOTIFY set"
} else {
                set NOTIFY 1
                puts "NOTIFY set"
}

source ./init_tests

#set PRDID [get_productid]
#puts "ProductID:$PRDID"

set SCRIPT_FILE ""

proc do_tests {GLOB} {

	source includes/globals.def


	set list [ glob $GLOB]
	set list [ lsort $list]
	puts $list

		foreach file $list {

		set catchback 0
		set filetype [file extension $file]
		regexp {([0-9]+)} $file SCRIPT_FILE
		puts "Debug: $SCRIPT_FILE"
		switch -glob $filetype {
		".tcl" { set catchback [catch { source $file }] }
		".exp" { set catchback [catch { source $file }] }
		".sh"  { puts "Executing Shell Script" 

			set fprefix "./"
			set efile $fprefix$file
			puts $efile
			log_user 1		
			set timeout 60
			spawn $efile
			expect -re \
	"(Results:) \"(\[A-Z\]|\[a-z\]|\[0-9\]|_| |-)+\" \"(\[A-Z\])+\" \"(\[A-Z\]|_|-|\\.|/| |\[a-z\]|\[0-9\])+\"" {   


#				puts "Found testcase results"
				puts $expect_out(0,string)
				set alist $expect_out(0,string)
				write_results [lindex $alist 1] [lindex $alist 2] [lindex $alist 3]
				exp_continue
				}

			}
		".pl"  { puts "Executing Perl Script"    
                        
                        spawn $file
                        expect "Results:*" {
#                                puts "Found testcase results"
                                set alist $expect_out(0,string)
                                write_results [lindex $alist 1] [lindex $alist 2] [lindex $alist 3]
                                }

                        }

		}
		if { $catchback == 1 } {
			puts "ERROR!!!"
			write_results "XXX 0" "ERRORS" "Alert, script error in $file !!!"
		}
	
	puts "###########################################################################"
	sleep 5

		}

	switch $output {
	"html" {
		set Datei [open $RESULTS a]
		puts $Datei "</table></body></html>"
		close $Datei

		} 
	"db" 	{
		write_db
		}
	default {
		puts "\nResults from $RESULTS :\n"
		sleep 2
		set Datei [open $RESULTS r]
			while { [gets $Datei Zeile] >= 0} {
				puts $Zeile
			}
		close $Datei
		}
	}

}
proc used_time {mystarttime myendtime} {

        source includes/globals.def

	set elapsed [timestamp -format "%H:%M:%S" -seconds [expr $myendtime - $mystarttime - 3600]]
	if {$output == "txt"} {
                set r_file [open $RESULTS a]    
                puts $r_file "==================================================================="
                puts $r_file "Elapsed time: $elapsed"
		close $r_file
		puts "Elapsed time: $elapsed"

	} else {
		puts "Elapsed time: $elapsed"
	}

	return $elapsed

}

proc usage {} {
	          puts "\nUsage: framework <format> <option checkpkg \[file\]>"
                  puts "Format:"
                  puts "\ttxt\tPlain text output"
                  puts "\tcsv\tComma separated values"
		  puts "\thtml\tHTML output"
		  puts "\tdb\tWrite temp data and update database"
                  puts "Options:"
                  puts "\t-full\t Run all tests"
                  puts "\t-single \[file\] Run specified test"
		  puts "\t-connect\t update database"
		  puts "Checkpgk:"
		  puts "\t-checkpkg Check if package is installed" 
		  puts "\t-nocheck  Avoid checking for installed package"
}



set option [lindex $argv 1]
set output [lindex $argv 0]
set checkp [lindex $argv 2]
set username [exec whoami]
if {$username != "root"} {
	puts "Please execute the test scripts as root"
	exit 1
	}


if {$argc <= 1} { usage 
		  exit 1
		}


set checkpkg	0
switch -- $checkp {
	"-checkpkg" {
		set checkpkg 1
	}
	"-nocheck" {
		set checkpkg 0
	}
	default {
		usage
		exit
	}
}


switch -- $option {

	"-full" { puts "Running all tests"
		init_results
		set start_time [timestamp]
		do_tests ./scripts/*.*
		set end_time [timestamp]
		used_time $start_time $end_time
	      }

	"-single" { puts "Running [lindex $argv 3] test"
		  init_results
                  set start_time [timestamp]
		  for {set i 3} {$i <= [llength $argv]} { incr i} {
			 set file [lindex $argv $i]  
			 puts $file
		  	 do_tests $file
		  }
                set end_time [timestamp]
		used_time $start_time $end_time
		}

	"-version" { puts $VERSION }

	"-connect" {

		set HOST [exec hostname] 
		set RESULTS $RESULTS.tmp
		write_db }

	default {
		usage
		}
	   
}

		

