File: 766

package info (click to toggle)
pcp 7.1.0-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 252,748 kB
  • sloc: ansic: 1,483,656; sh: 182,366; xml: 160,462; cpp: 83,813; python: 24,980; perl: 18,327; yacc: 6,877; lex: 2,864; makefile: 2,738; awk: 165; fortran: 60; java: 52
file content (137 lines) | stat: -rwxr-xr-x 3,954 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/bin/sh
# PCP QA Test No. 766
# Test using the pmfind app to find PCP servers using the active probing
# discovery mechanism. Probe inet only.
#
# Copyright (c) 2014 Red Hat.  All Rights Reserved.
#

seq=`basename $0`
echo "QA output created by $seq"

# get standard environment, filters and checks
. ./common.discovery

status=1	# failure is the default!
trap "cd $here; rm -rf $tmp.*; exit \$status" 0 1 2 3 15

_sought_filter()
{
    # Only pmcd is guaranteed to be running, but other services may also be.
    # Transform two cases - no servers vs found servers - into deterministic
    # output for the --all invocations
    sed \
	-e 's/No \(pmproxy servers\) discovered/Sought \1/g' \
	-e 's/No \(pmwebapi servers\) discovered/Sought \1/g' \
	-e 's/Discovered \(pmproxy servers\):/Sought \1/g' \
	-e 's/Discovered \(pmwebapi servers\):/Sought \1/g' \
    # end
}

_unresolved_filter()
{
    sed -e '/  pcp:/d;
	    /  proxy:/d;
	    /  http:/d' \
    | _sought_filter
}

_resolved_filter()
{
    # Pass unresolved urls, filter the resolved ones.
    sed -e '/  pcp:\/\/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/{
p
n
}' \
	-e '/  proxy:\/\/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/{
p
n
}' \
	-e '/  http:\/\/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*/{
p
n
}' \
	-e '/  pcp:/d' \
	-e '/  proxy:/d' \
	-e '/  http:/d' \
    | _sought_filter
}

_error_tolerance_filter()
{
    grep Discovered.pmcd.servers:
    # ignore everything else, incl. errors
}

# real QA test starts here
_control_service_discovery

# Obtain the inet address of the primary network interface ...
# cull any loopback aliases
addr=`host $(hostname) \
      | sed -n \
	  -e '/^127\.0\.1/d' \
	  -e '/has address/s/.* address //p'`
if [ -z "$addr" ]
then
    host $(hostname) >>$seq_full 2>&1
    _notrun "no primary network interface?"
    #NOTREACHED
fi
numaddr=`echo "$addr" | wc -w | sed -e 's/  *//g'`
if [ $numaddr -gt 1 ]
then
    echo "Warning: $(hostname) has multiple network interfaces!" >>$seq_full
    echo "Culling: extras from addr=$addr" >>$seq_full
    addr=`echo "$addr" | sed -e 's/ .*//' -e 1q`
fi
echo "addr=$addr" >>$seq_full

# Probe the obtained network.
# Test various combinations of service queries and subnet sizes. Keep the
# subnet size small -- say max 4 bits.
echo "-m probe=$addr/32" >> $seq_full
echo "-m probe=INET_ADDR/32"
pmfind -m probe=$addr/32 | _unresolved_filter
echo "Exit status: $?" | tee -a $seq_full

# for this one, we should not be surprised to find peer VMs
# in the QA Farm ... there is no DNS to support the reverse
# lookup, so they will be IP addr on the same Class C subnet
#
subnet=`echo $addr | sed -e 's/\.[^.]*$/./' -e 's/\./\\\\./g'`
echo "subnet=$subnet" >>$seq_full
echo "-s pmcd -m probe=$addr/31" -r >> $seq_full
echo "-s pmcd -m probe=INET_ADDR/31 -r"
pmfind -s pmcd -m probe=$addr/31 -r \
| tee -a $seq_full \
| _resolved_filter \
| grep -v "pcp://$subnet"
echo "Exit status: $?" | tee -a $seq_full

echo "-q -m probe=$addr/30" >> $seq_full
echo "-q -m probe=INET_ADDR/30"
pmfind -q -m probe=$addr/30 | _unresolved_filter
echo "Exit status: $?" | tee -a $seq_full

echo "-q -s pmcd -m probe=$addr/29 --resolve" >> $seq_full
echo "-q -s pmcd -m probe=INET_ADDR/29 --resolve"
pmfind -q -s pmcd -m probe=$addr/29 --resolve | _resolved_filter
echo "Exit status: $?" | tee -a $seq_full

echo "-q -s pmcd -m probe=$addr/28,maxThreads=8" >> $seq_full
echo "-q -s pmcd -m probe=INET_ADDR/28,maxThreads=8"
pmfind -q -s pmcd -m probe=$addr/28,maxThreads=8 | _unresolved_filter
echo "Exit status: $?" | tee -a $seq_full

# Try to cause errors; check pmprintf path doesn't blow stack
# pmfind just needs to survive to its result message
echo "ulimit -n 10" >> $seq_full
echo "ulimit -n 10"
bash -c "ulimit -n 10; pmfind -s pmcd -m probe=127.0.0.1/24,maxThreads=64" 2>&1 | tee -a $seq_full | _error_tolerance_filter
echo "Exit status: $?" | tee -a $seq_full

# success, all done
status=0

exit