[PATCH] Add tests for option -e

Fei, Jie/费 杰 feij.fnst at cn.fujitsu.com
Tue Jan 26 05:50:08 UTC 2016


Hi,

On 01/18/2016 11:01 AM, Dmitry V. Levin wrote:
> On Fri, Jan 08, 2016 at 04:07:52PM +0800, Fei, Jie/费 杰 wrote:
>> Hello!
>>
>> Thanks for your comments several days ago and according to them
>> I wrote this patch. This patch adds tests to check how strace -e works
>> with different parameters, how about it?
> [...]
>>> diff --git a/tests/abbrev-e.c b/tests/abbrev-e.c
>>> new file mode 100644
>>> index 0000000..e33f656
>>> --- /dev/null
>>> +++ b/tests/abbrev-e.c
>>> @@ -0,0 +1,11 @@
>>> +#include <stdio.h>
>>> +#include <sys/utsname.h>
>>> +
>>> +int main()
>>> +{
>>> +	int ret;
>>> +	struct utsname buf;
>>> +	ret = uname(&buf);
>>> +	printf("uname({sysname=\"%s\", nodename=\"%s\", ...}) = %d\n", buf.sysname, buf.nodename, ret);
>>> +	return 0;
>>> +}
>>> diff --git a/tests/abbrev-e.test b/tests/abbrev-e.test
>>> new file mode 100755
>>> index 0000000..3e74d47
>>> --- /dev/null
>>> +++ b/tests/abbrev-e.test
>>> @@ -0,0 +1,13 @@
>>> +#!/bin/sh
>>> +
>>> +. "${srcdir=.}/init.sh"
>>> +
>>> +OUT="${LOG}.out"
>>> +
>>> +run_prog
>>> +run_strace -e abbrev=uname -euname -qq $args >"$OUT"
> What are you testing here?  Since the default behavior is abbrev=all,
> I suppose you meant something different from what you've written here.
I didn't notice that the default set is all, and now I modified the test
with abbrev=none in patch-v2.
>>> +
>>> +match_diff "$OUT" "$LOG"
>>> +rm -f "$OUT"
>>> +
>>> +exit 0
>>> diff --git a/tests/raw-e.c b/tests/raw-e.c
>>> new file mode 100644
>>> index 0000000..7b2dfcc
>>> --- /dev/null
>>> +++ b/tests/raw-e.c
>>> @@ -0,0 +1,10 @@
>>> +#include <stdio.h>
>>> +#include <unistd.h>
>>> +
>>> +int main()
>>> +{
>>> +	pid_t pid;
>>> +	pid = getpid();
>>> +	printf("getpid() = 0x%x\n", pid);
>>> +	return 0;
>>> +}
>>> diff --git a/tests/raw-e.test b/tests/raw-e.test
>>> new file mode 100755
>>> index 0000000..d76a0f0
>>> --- /dev/null
>>> +++ b/tests/raw-e.test
>>> @@ -0,0 +1,13 @@
>>> +#!/bin/sh
>>> +
>>> +. "${srcdir=.}/init.sh"
>>> +
>>> +OUT="${LOG}.out"
>>> +
>>> +run_prog
>>> +run_strace -e raw=getpid -egetpid -a9 -qq $args >"$OUT"
> getpid is not portable: alpha has no getpid syscall.
>
Thanks! I replaced it with uname in patch-v2.
>>> +
>>> +match_diff "$LOG" "$OUT"
>>> +rm -f "$OUT"
>>> +
>>> +exit 0
>>> diff --git a/tests/read-e.c b/tests/read-e.c
>>> new file mode 100644
>>> index 0000000..723cb60
>>> --- /dev/null
>>> +++ b/tests/read-e.c
>>> @@ -0,0 +1,40 @@
>>> +#include <unistd.h>
>>> +#include <fcntl.h>
>>> +#include <stdlib.h>
>>> +#include <stdio.h>
>>> +
>>> +void do_readfd(int fd)
>>> +{
>>> +	int oldfd;
>>> +	oldfd = open("/dev/zero", O_RDONLY);
>>> +	if (-1 == oldfd)
>>> +	{
>>> +		return;
>>> +	}
>>> +	int newfd;
>>> +	if (oldfd == fd)
>>> +	{
>>> +		newfd = fd;
>>> +	}
>>> +	else
>>> +	{
>>> +		newfd = dup2(oldfd, fd);
>>> +		close(oldfd);
>>> +		if (-1 == newfd)
>>> +		{
>>> +			return;
>>> +		}
>>> +	}
>>> +	char c;
>>> +	read(newfd, &c, 1);
>>> +	close(newfd);
>>> +}
>>> +
>>> +int main()
>>> +{
>>> +	long fd = 4;
>>> +	do_readfd(fd);
>>> +	fd = 5;
>>> +	do_readfd(fd);
>>> +	return 0;
>>> +}
>>> diff --git a/tests/read-e.test b/tests/read-e.test
>>> new file mode 100755
>>> index 0000000..d8ebe1a
>>> --- /dev/null
>>> +++ b/tests/read-e.test
>>> @@ -0,0 +1,26 @@
>>> +#!/bin/sh
>>> +
>>> +. "${srcdir=.}/init.sh"
>>> +
>>> +check_rd()
>>> +{
>>> +    FUNCLINE=`grep -n "$1" "$LOG" | sed -n '$p' | cut -f1 -d:`
>>> +    let FUNCLINE=FUNCLINE+1
>>> +    CONTENT=`sed -n "$FUNCLINE"p "$LOG"`
>>> +    ERROR=`echo "$CONTENT" | grep " | 00000"`
> "let" keyword is not a portable /bin/sh syntax,
> and the whole shell script does not use regular shell programming
> patterns, e.g. there is no need to save sed's output to a variable
> just to grep it afterwards.
I have modified the test file.
>>> +    if [ "$2" -eq 1 ];then
>>> +        if [ "$ERROR" = "" ];then
>>> +            fail_ "read not exist"
>>> +        fi
>>> +    else
>>> +        if [ "$ERROR" != "" ];then
>>> +            fail_ "read exist"
>>> +        fi
>>> +    fi
>>> +}
>>> +
>>> +run_prog
>>> +run_strace -e read=4 -eread -qq $args
>>> +
>>> +check_rd "read(4, \"\\\\0\", 1) \+= 1" 1
>>> +check_rd "read(5, \"\\\\0\", 1) \+= 1" 0
>>> diff --git a/tests/verbose-e.test b/tests/verbose-e.test
>>> new file mode 100755
>>> index 0000000..1c4d361
>>> --- /dev/null
>>> +++ b/tests/verbose-e.test
>>> @@ -0,0 +1,13 @@
>>> +#!/bin/sh
>>> +
>>> +. "${srcdir=.}/init.sh"
>>> +
>>> +OUT="${LOG}.out"
>>> +
>>> +run_prog ./abbrev-e
>>> +run_strace -e verbose=uname -euname -qq $args >"$OUT"
> What are you testing here?  Since the default behavior is verbose=all,
> I suppose you meant something different from what you've written here.
>
Same as above, I modified it with verbose=none in patch-v2.
>>> +
>>> +match_diff "$OUT" "$LOG"
>>> +rm -f "$OUT"
>>> +
>>> +exit 0
>>> diff --git a/tests/write-e.c b/tests/write-e.c
>>> new file mode 100644
>>> index 0000000..a495c7a
>>> --- /dev/null
>>> +++ b/tests/write-e.c
>>> @@ -0,0 +1,39 @@
>>> +#include <unistd.h>
>>> +#include <fcntl.h>
>>> +#include <stdlib.h>
>>> +#include <stdio.h>
>>> +
>>> +void do_writefd(int fd)
>>> +{
>>> +	int oldfd;
>>> +	oldfd = open("/dev/null", O_WRONLY);
>>> +	if (-1 == oldfd)
>>> +	{
>>> +		return;
>>> +	}
>>> +	int newfd;
>>> +	if (oldfd == fd)
>>> +	{
>>> +        newfd = fd;
>>> +	}
>>> +	else
>>> +	{
>>> +		newfd = dup2(oldfd, fd);
>>> +		close(oldfd);
>>> +		if (-1 == newfd)
>>> +		{
>>> +			return;
>>> +		}
>>> +	}
>>> +	write(newfd, "", 1);
>>> +	close(newfd);
>>> +}
>>> +
>>> +int main()
>>> +{
>>> +	long fd = 4;
>>> +	do_writefd(fd);
>>> +	fd = 5;
>>> +	do_writefd(fd);
>>> +	return 0;
>>> +}
>>> diff --git a/tests/write-e.test b/tests/write-e.test
>>> new file mode 100755
>>> index 0000000..ba07fa9
>>> --- /dev/null
>>> +++ b/tests/write-e.test
>>> @@ -0,0 +1,26 @@
>>> +#!/bin/sh
>>> +
>>> +. "${srcdir=.}/init.sh"
>>> +
>>> +check_wr()
>>> +{
>>> +    FUNCLINE=`grep -n "$1" "$LOG" | sed -n '$p' | cut -f1 -d:`
>>> +    let FUNCLINE=FUNCLINE+1
>>> +    CONTENT=`sed -n "$FUNCLINE"p "$LOG"`
>>> +    ERROR=`echo "$CONTENT" | grep " | 00000"`
> "let" keyword is not a portable /bin/sh syntax,
> and the whole shell script does not use regular shell programming
> patterns, e.g. there is no need to save sed's output to a variable
> just to grep it afterwards.
>
>
>
>
> ------------------------------------------------------------------------------
> Site24x7 APM Insight: Get Deep Visibility into Application Performance
> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> Monitor end-to-end web transactions and take corrective actions now
> Troubleshoot faster and improve end-user experience. Signup Now!
> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
>
>
> _______________________________________________
> Strace-devel mailing list
> Strace-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/strace-devel

-- 
Thanks!
Fei Jie



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.strace.io/pipermail/strace-devel/attachments/20160126/b570b557/attachment.html>


More information about the Strace-devel mailing list