set TEST_NAME "pr13158"
if {![installtest_p]} { untested $TEST_NAME; return }

# This is a section of the original rename_module.exp test that caused
# the problem of a systemtap module sticking around to be found.  That
# test case bug found a real problem  - that staprun didn't handle
# SIGINT.

########## Inserting 2 Identical Modules: Staprun without -R #################
# Should give an error when inserting 2 identical modules 
# when calling staprun directly without using -R

set compile { exec stap -e {probe begin{printf("Hello\n");}} -p4 }
set module_path [eval $compile] 
set module_name [file rootname [file tail $module_path]]

spawn staprun $module_path
set firstid $spawn_id

# Make sure we get the output from the 1st copy of the module before
# trying to load the 2nd copy of the module.
set test "$TEST_NAME: Inserting 1st module"
set output_seen 0
expect {
    -timeout 30
    "Hello\r\n" { set output_seen 1 }
    timeout { fail "$test (timeout)" }
}
if {$output_seen} {
    pass "$test"
} else {
    fail "$test"
    return
}

set test "$TEST_NAME: Inserting 2 Identical Modules: Staprun without -R"
set failed 0

spawn staprun $module_path
set secondid $spawn_id

# Make sure it fails
expect {
    -timeout 30
    -re {^ERROR: Couldn't insert module .*: File exists\r\n} {
	exp_continue
    }
    -re {^ERROR: Rerun with staprun option '\-R' to rename this module.\r\n} {
	exp_continue
    }
    -re {^[^\r\n]*\r\n} {
	set failed 1		
    }
    timeout { fail "$test (timeout)" }
}

# Kill both of the hanging processes
set firstpid [exp_pid -i $firstid]
set secondpid [exp_pid -i $secondid]
exec kill $firstpid
exec kill $secondpid
catch { wait -i $firstid; wait -i $secondid; close }
if {$failed} {
    fail "$test"
} else {
    pass "$test"
}

# Is the module still loaded?
if {[catch { exec lsmod | grep -q $module_name }]} {
    pass "$TEST_NAME: module was correctly removed"
} else {
    fail "$TEST_NAME: module is still loaded!"
    catch {exec staprun -d $module_name}
}
