# Some more complex uses of mount tables and mounts
#
# TODO - list the examples and any issues.

set localaddr="--veyron.tcp.address=127.0.0.1:0"
set ws=--veyron.tcp.protocol=ws

cache off

root -- $localaddr
set root_h=$_
read $root_h
eval $root_h
set root=$MT_NAME

set NAMESPACE_ROOT=$root
mt -- $localaddr tl/a
set m=$_
set mt_a_h=$m
read $m
eval $m
set mt_a_name=$MT_NAME

mt  -- $localaddr tl/b
set m=$_
set mt_b_h=$m
eval $m
eval $m
set mt_b_name=$MT_NAME

setRoots $root

#
# Using glob 'correctly' takes some care. There are (at least?) three
# forms that you need to consider...
#

# ls ... finds all of the mount points, as relative names
ls ...
set l=$_
eval $l
assert $RN 3
wait $l

# ls /... is meaningless, finds itself.
ls /...
set l=$_
eval $l
eval $l
assert $R0 /...
wait $l

# a rooted glob finds all of the mount points, include an entry for the root
# itself. It returns rooted names.
ls $root/...
set l=$_
eval $l
assert $RN 4
wait $l

resolve tl/a
set r=$_
eval $r
assert $RN 1
eval $r
set ep1=$R0
assert $mt_a_name $ep1
wait $r

#
# Now, let's run some echo servers, invoke rpc's on them, see what
# glob and resolve do.
#

# run an echo server on tl.
echoServer  -- $localaddr "E1" tl
set es_E1=$_
read $es_E1
eval $es_E1
set es_E1_name=$NAME

# the echo server above, obscures the mount tables below it.
# each of the ls (i.e. glob) calls below will lead to 'ipc:unknown method'
# errors generated by the echo server.
ls ...
set l=$_
eval $l
assert $RN 2

ls $root/...
set l=$_
eval $l
assert $RN 3

echoClient tl test
read $_ o
assert $o "E1: test"

# resolve will find the address of the echo server.
resolve tl
set r=$_
eval $r
assert $RN 1
eval $r
set ep1=$R0
assert $es_E1_name $ep1

# let's have the echo server shut down
stop $es_E1

# and now, we can see the mount tables again.
ls ...
set l=$_
eval $l
assert $RN 3
wait $l

resolve tl/a
set r=$_
eval $r
assert $RN 1
eval $r
set ep1=$R0
assert $mt_a_name $ep1

# run an echo server on tl/a - note that this currently doesn't seem to
# have any effect on the mount table - that is, I suspect the mount table
# refuses the mount.
echoServer  -- $localaddr "E2" tl/a
set es_E2=$_
read $es_E2
eval $es_E2
set es_E2_name=$NAME

# we can invoke the echo server 'E2' just fine, probably because
# we just get lucky and get the most recently mounted address back first.
#echoClient "tl/b" bar
#read $_ o
#assert $o "E2: bar"

# but, when we resolve it's name, we get back two servers, one for the
# mount table and another for the server!
#resolve tl/a
#set r=$_
#eval $r
#assert $RN 2
#eval $r
#set ep1=$R0
#eval $r
#set ep2=$R1
#assertOneOf $mt_a_name $ep1 $ep2

# resolveMT correctly returns the root's address.
resolveMT tl/a
set r=$_
eval $r
assert $RN 1
eval $r
assert $R0 $root/tl/a

#
# NOTE: I propose to fix the above ambiguity by having resolve only
# ever return non-mountpoint servers. To do so, requires that the mount table
# can tell them apart, which requires the separate Mount and MountMT calls.
#

# Mount the same server somewhere else
# TODO(cnicolaou): $es_E2_name needs to be made into an endpoint.
mount tl/a/c $es_E2_name 1h
wait $_

ls ...
wait $_

# this leads to 1 call of ResolveStep for //c on the echo server.
resolve tl/a/c
wait $_

# this leads to 2 calls of ResolveStep for //c on the echo server.
echoClient tl/a/c baz
read $_ o
assert $o "E2: baz"

#
# Can the spurious calls to ResolveStep above be avoided??
#

# Mount the same server with a really long name.
set long_name=tl/b/x/y/z/really/long
mount $long_name $es_E2_name 1h
wait $_

echoClient $long_name "long baz"
read $_ o
assert $o "E2: long baz"

# This example just creates a 'pointer' into the Echo servers name space.
# NOTE: do we really need this functionality?
#
# ResolveStep is again called on the server for //tl/b/x/y/z/really/long
mount tl/b/short1 $es_E2_name/$long_name 1h
wait $_

echoClient tl/b/short1 "short baz"
read $_ o
assert $o E2.${long_name}": short baz"

# Create a mount table with a 'long' name
set long_name=tl/b/some/deep/name/that/is/a/mount/table
mt -- $localaddr $long_name
set m=$_
read $m
eval $m
set mt_l_name=$MT_NAME


# Create a second mount table with a 'long' name
set second_long_name=tl/a/some/deep/name/that/is/a/mount/table
mt -- $localaddr $second_long_name
set m=$_
read $m
eval $m
set mt_l2_name=$MT_NAME

# Run an echo server that uses that mount table
echoServer -- $localaddr "E3" $long_name/echo
set es_E3=$_
eval $es_E3
set es_E3_name=$NAME

echoClient $long_name/echo "long E3"
read $_ o
assert $o "E3: long E3"

# make sure that the mount table is the one we expect.
resolveMT $long_name/echo
set r=$_
eval $r
assert $RN 1
eval $r
set ep1=$R0
assert $mt_l_name/echo $ep1

# Now, use mount directly to create a 'symlink'
set symlink_target=some/deep/name/that/is/a/mount
mount tl/b/symlink $mt_b_name/$symlink_target 1h M
wait $_

ls -- -l tl/b/symlink
wait $_

resolve tl/b/symlink
set r=$_
eval $r
# used to return nothing since symlink is an 'interior' node.
#assert $RN 0
#
# now we get the 'interior' returned.
assert $RN 1
eval $r
assert $R0 $mt_b_name/$symlink_target
# don't close or wait for this command since it'll error out.


# resolveMT will return the original mount point
resolveMT tl/b/symlink
set r=$_
eval $r
assert $RN 1
eval $r
set ep1=$R0
assert $mt_b_name/symlink $ep1

stop $es_E3
stop $es_E2

quit


