summaryrefslogtreecommitdiffstats
path: root/tests/basic/accept-v6v4.t
blob: 7128c12c6be89e2e4917d60781944598b2380705 (plain)
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
#!/bin/bash

. $(dirname $0)/../nfs.rc

#
# This test ensures that GlusterFS provides NFS, Mount and its Management daemon
# over both IPv4 and IPv6. It uses netcat to check the services running on both
# IPv4 & IPv6 addresses as well as a mount to test that mount & nfs work.
#

IPV4_SUPPORT=false
IPV6_SUPPORT=false

host $HOSTNAME | grep -q "has address" && IPV4_SUPPORT=true
host $HOSTNAME | grep -q "has IPv6 address" && IPV6_SUPPORT=true

. $(dirname $0)/../include.rc

cleanup;

mkdir -p $B0/b{0,1,2}

# make sure no registered rpcbind services are running
service rpcbind restart

TEST glusterd
TEST pidof glusterd

TEST $CLI vol create $V0 replica 3 $H0:$B0/b0 $H0:$B0/b1 $H0:$B0/b2

TEST $CLI vol set $V0 cluster.self-heal-daemon off
TEST $CLI vol set $V0 nfs.disable off
TEST $CLI vol set $V0 cluster.choose-local off
TEST $CLI vol start $V0

MOUNTD_PORT=38465
MGMTD_PORT=24007
NFSD_PORT=2049

function check_ip_port {
        ip=$1
        port=$2
        type=$3

        nc_flags=""
        if [ "$type" == "v6" ] && [ "$ip" == "NONE" ]; then
          echo "Y"
          return
        else
          nc_flags="-6"
        fi

        if [ "$type" == "v4" ] && [ "$ip" == "NONE" ]; then
          echo "Y"
          return
        fi

        if exec 3<>/dev/tcp/$ip/$port; then
          echo "Y"
        else
          echo "N"
        fi
}

function check_nfs {
        ip=$1
        type=$2

        if [ "$ip" == "NONE" ]; then
          echo "Y"
          return
        fi

        if [ "$type" == "v6" ]; then
          addr="[$ip]"
        else
          addr="$ip"
        fi

        if mount_nfs $addr:/$V0 $N0; then
          umount_nfs $N0
          echo "Y"
        else
          echo "N"
        fi
}

if [ ! $IPV4_SUPPORT ] && [ ! $IPV6_SUPPORT ]; then
  exit 1
fi

# Get the V4 & V6 addresses of this host
if $IPV4_SUPPORT; then
  V4=$(host $HOSTNAME | head -n1 | awk -F ' ' '{print $4}')
else
  V4="NONE"
fi

if $IPV6_SUPPORT; then
  V6=$(host $HOSTNAME | tail -n1 | awk -F ' ' '{print $5}')
else
  V6="NONE"
fi

# First check the management daemon
EXPECT "Y" check_ip_port $V6 $MGMTD_PORT "v6"
EXPECT "Y" check_ip_port $V4 $MGMTD_PORT "v4"

# Give the MOUNT/NFS Daemon some time to start up
sleep 4

EXPECT "Y" check_ip_port $V4 $MOUNTD_PORT "v6"
EXPECT "Y" check_ip_port $V6 $MOUNTD_PORT "v4"

EXPECT "Y" check_ip_port $V4 $NFSD_PORT "v6"
EXPECT "Y" check_ip_port $V6 $NFSD_PORT "v4"

# Mount the file system
EXPECT "Y" check_nfs $V6 "v6"
EXPECT "Y" check_nfs $V4 "v4"

cleanup;