[LTP] [PATCH v2] ssh-stress: Convert to new api

Joerg Vehlow lkml@jv-coder.de
Wed Jun 16 08:16:34 CEST 2021


Hi Alexey,

thanks for your review. I will integrate the changes, test and send a v3.

>> +# SSH config file on the remote host
>> +RHOST_SSH_CONF=
>> +# SSG command to connect from the remote host to the test host
>        ^
>       SSH
Obviously, thanks
>
>> +RHOST_SSH=
>> +# Processes started on the remote host, killed at cleanup
>> +RHOST_PIDS=
>> +# Netstress process started on the test host, killed at cleanup
>> +NETSTRESS_PID=
>>   
>>   cleanup()
>>   {
>> +	local pids pid
>> +
>>   	# Stop the ssh daemon
>> -	test -s sshd.pid && kill $(cat sshd.pid)
>> -	pkill 'netstress$'
>> -	tst_rmdir
>> -	[ "$rtmpdir" ] && tst_rhost_run -c "rm -rf $rtmpdir"
>> -	TMPDIR=
>> +	[ -s sshd.pid ] && kill $(cat sshd.pid)
>> +	[ -n "$NETSTRESS_PID" ] && kill -2 $NETSTRESS_PID >/dev/null 2>&1
>> +
>> +	for pid in $RHOST_PIDS; do
>> +		tst_rhost_run -c "kill -- $pid"  >/dev/null 2>&1
>> +	done
> tst_rhost_run -c "kill $RHOST_PIDS"
I guess I did not use use it, because it might be a huge number of pids 
and I did not look at the actual limits, but now that I looked at it, it 
should be big enough...

>
>> +
>> +	# Kill all remaining ssh processes
>> +	tst_rhost_run -c "ps auwx | \
>> +		awk '\$0 ~ \"$RHOST_SSH_CONF\" && \$11 == \"ssh\" {print \$2}' | \
>> +		xargs -r -t kill -- >/dev/null 2>&1"
>>   }
>>   
> What about using pkill -f instead of ps|awk|kill?
I guess I did not use pkill for two reasons:
1. I wanted to be sure to really only kill ssh processes with 
$RHOST_SSH_CONF in their arguments
2. I did not want to use an extra tool, that is not necessarily 
available on all systems.

The first one could be solved by using "pkill -f "^ssh 
.*$RHOST_SSH_CONF", I guess. This still leaves a problem with unescaped 
regexp meta characters in RHOST_SSH_CONF, but my awk solution has the 
same problem. But I think this is only theoretical, it is extremely 
unlikely, that any regexp meta character apart from "." is used in 
RHOST_SSH_CONF and the dot will unlikely produce false positives.
The second point can be ignored. pkill is used in many locations 
throughout ltp already. It should probably be added as a runtime dependency.

>
>> -	tst_rhost_run -s -c "ssh-stress02-rmt.sh $TST_IPVER $(tst_ipaddr) \
>> -		$rconfig $CONNECTION_TOTAL $NS_DURATION"
>> +	tst_res TINFO "Verify the ssh connectivity over IPv4/IPv6 is not broken after creating many ssh sessions"
>                                                             ^
> The message may have indicated the exact IP version with $TST_IPVER
Yeah right, that was just copy and pasted from the original test 
description.
>
>> +	for pid in $RHOST_PIDS; do
>> +		tst_rhost_run -c "kill $pid" >/dev/null
>> +		[ $? -ne 0 ] && num=$((num + 1))
> Do we need $((num + 1)) here? At least it could be used in the
> message below instead of "some ssh"...
I think I just counted them here, because I wanted to keep the loop 
running, so all processes are killed before tst_brk is called.
But yes adding it to the message makes sense
>>   
>> -	netstress -R 3 -g $port > tcp_server.log 2>&1 &
>> +	# Start a tcp server
>> +	netstress -R 3 -g $port >/dev/null 2>&1 &
>> +	NETSTRESS_PID=$!
>
> We can now use netstress -B, it will go to background only after sucessfully
> performing bind()/listen(). The actual port number will be saved in the
> netstress_port file, i.e.:
>
> netstress -B .
> port=$(cat netstress_port)
I will try this
>
>>   
>> -	tst_rhost_run -s -c "ssh-stress03-rmt.sh $TST_IPVER $(tst_ipaddr) \
>> -		$rconfig $port $NS_TIMES"
>> +	# Setup an ssh tunnel from the remote host to testhost
>> +	RHOST_PIDS=$(tst_rhost_run -c \
>> +		"$RHOST_SSH -N -L $lport:$rhost:$port </dev/null 1>/dev/null 2>&1 \
>> +		& echo \$!")
>> +	tst_sleep 1
> Why you don't use -f option with ssh? I wouldn't rely on sleep 1 here.
Good idea, I did not think about -f.

Jörg


More information about the ltp mailing list