Skip to content

Commit 3fb00d3

Browse files
committed
Extend cmsTraceFunction test to putenv() and --abort
1 parent 8e6dacc commit 3fb00d3

File tree

2 files changed

+76
-5
lines changed

2 files changed

+76
-5
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <iostream>
2+
#include <cstdlib>
3+
#include <cstring>
4+
#include <stdlib.h>
5+
6+
class ScheduleItems {
7+
public:
8+
ScheduleItems() {}
9+
void initMisc();
10+
};
11+
12+
void ScheduleItems::initMisc() { std::cout << "ScheduleItems::initMisc() called" << std::endl; }
13+
14+
void my_putenv(const char* env, char* put) {
15+
putenv(put);
16+
std::cout << "putenv() called" << std::endl;
17+
std::cout << env << "=" << std::getenv(env) << std::endl;
18+
}
19+
20+
int main() {
21+
// putenv() expects modifiable char array that lives throughout the program
22+
char* foo1 = new char[10];
23+
char* foo2 = new char[10];
24+
char* foo3 = new char[10];
25+
std::strncpy(foo1, "FOO=1", 10);
26+
std::strncpy(foo2, "FOO=2", 10);
27+
std::strncpy(foo3, "FOO=3", 10);
28+
29+
my_putenv("FOO", foo1);
30+
ScheduleItems obj;
31+
obj.initMisc();
32+
my_putenv("FOO", foo2);
33+
my_putenv("FOO", foo3);
34+
return 0;
35+
}
Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,45 @@
11
#!/bin/bash -ex
2+
3+
TRACE="cmsTraceFunction --startAfterFunction ScheduleItems::initMisc setenv -f putenv --abort"
4+
5+
# Check setenv
26
g++ -o test-cmsTraceFunction-setenv $(dirname $0)/test-cmsTraceFunction-setenv.cpp
3-
cmsTraceFunction --startAfterFunction ScheduleItems::initMisc setenv ./test-cmsTraceFunction-setenv 2>&1 | grep setenv > setenv.log
4-
rm -f test-cmsTraceFunction-setenv
5-
setenv_count=$(grep '^setenv() called' setenv.log | wc -l)
6-
break_setenv=$(grep 'Breakpoint .* in setenv ()' setenv.log | wc -l)
7-
if [ ${setenv_count} != 3 ] || [ ${break_setenv} != 2 ] ; then
7+
set +e
8+
$TRACE ./test-cmsTraceFunction-setenv 2>&1 > setenv_raw.log
9+
ret_setenv=$?
10+
set -e
11+
grep setenv setenv_raw.log > setenv.log
12+
#rm -f test-cmsTraceFunction-setenv
13+
14+
if [ ${ret_setenv} = 0 ]; then
15+
echo "cmsTraceFunction exited with exit code 0, expected non-zero exit code"
16+
exit 1
17+
fi
18+
19+
setenv_count=$(grep -c '^setenv() called' setenv.log)
20+
break_setenv=$(grep -c 'Breakpoint .* in setenv ()' setenv.log)
21+
if [ ${setenv_count} != 1 ] || [ ${break_setenv} != 1 ] ; then
22+
echo "Unexpected number of setenv calls ${setenv_count} or breakpoints ${break_setenv}; expecting both to be 1"
23+
exit 1
24+
fi
25+
26+
# Check putenv
27+
g++ -o test-cmsTraceFunction-putenv $(dirname $0)/test-cmsTraceFunction-putenv.cpp
28+
set +e
29+
$TRACE ./test-cmsTraceFunction-putenv 2>&1 > putenv_raw.log
30+
ret_putenv=$?
31+
set -e
32+
grep putenv putenv_raw.log > putenv.log
33+
rm -f test-cmsTraceFunction-putenv
34+
35+
if [ ${ret_puttenv} = 0 ]; then
36+
echo "cmsTraceFunction exited with exit code 0, expected non-zero exit code"
37+
exit 1
38+
fi
39+
40+
putenv_count=$(grep -c '^putenv() called' putenv.log)
41+
break_putenv=$(grep -c 'Breakpoint .* in putenv ()' putenv.log)
42+
if [ ${putenv_count} != 1 ] || [ ${break_tenv} != 1 ] ; then
43+
echo "Unexpected number of putenv calls ${putenv_count} or breakpoints ${break_putenv}; expecting both to be 1"
844
exit 1
945
fi

0 commit comments

Comments
 (0)