summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/nns/nns_cluster.test
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/nns/nns_cluster.test')
-rw-r--r--tcllib/modules/nns/nns_cluster.test195
1 files changed, 195 insertions, 0 deletions
diff --git a/tcllib/modules/nns/nns_cluster.test b/tcllib/modules/nns/nns_cluster.test
new file mode 100644
index 0000000..cdd4fac
--- /dev/null
+++ b/tcllib/modules/nns/nns_cluster.test
@@ -0,0 +1,195 @@
+# -*- tcl -*-
+# common.test: Tests for the common code of the name service
+#
+# Sourcing this file into Tcl runs the tests and generates output for
+# errors. No output means no errors were found.
+
+# -------------------------------------------------------------------------
+
+set testutilsscript [file join \
+ [file dirname [file dirname [file join [pwd] [info script]]]] \
+ devtools testutilities.tcl]
+source $testutilsscript
+
+package require tcltest
+testsNeedTcl 8.5
+testsNeedTcltest 1.0
+
+set ::WHOAMI Main
+
+support {
+ use snit/snit2.tcl snit
+ use comm/comm.tcl comm
+ use dns/ip.tcl ip
+ use nettool/nettool.tcl nettool
+ use cron/cron.tcl cron
+ use uuid/uuid.tcl uuid
+ use interp/interp.tcl interp
+ use log/logger.tcl logger
+ use md5/md5x.tcl md5
+}
+testing {
+ useLocal nns_cluster.tcl nameserv::cluster
+}
+
+###
+# Create a server in a seperate interp
+###
+interp create server
+interp eval server [list set testutilsscript $testutilsscript]
+interp eval server {
+ source $testutilsscript
+ set ::WHOAMI Server
+
+ package require tcltest
+ testsNeedTcl 8.5
+ testsNeedTcltest 1.0
+
+ support {
+ use snit/snit2.tcl snit
+ use comm/comm.tcl comm
+ use dns/ip.tcl ip
+ use nettool/nettool.tcl nettool
+ use cron/cron.tcl cron
+ use uuid/uuid.tcl uuid
+ use interp/interp.tcl interp
+ use log/logger.tcl logger
+ use md5/md5x.tcl md5
+ }
+ testing {
+ use nns/nns_cluster.tcl nameserv::cluster
+ }
+ set ::cluster::local_pid SERVER
+ ::cluster::publish nns@[::cluster::macid] {}
+ update
+}
+set ::cluster::local_pid MAIN
+set macid [::cluster::macid]
+set myport [::nettool::allocate_port 10000]
+
+::cluster::ping nns@$macid
+set data [::cluster::search *]
+test cluster-comm-1.0 {Publish service - NNS} {
+ dict exists $data nns@[::cluster::macid]
+} {1}
+
+test cluster-comm-1.1 {Check that non-existant service does not exist} {
+ dict exists $data foo@bar
+} {0}
+
+###
+# Create a phony service
+###
+set now [clock seconds]
+::cluster::publish foo@bar [list clocktime $now]
+# The windows event loop needs a breather
+::cluster::ping nns@$macid
+
+set data [::cluster::search *]
+test cluster-comm-2.0 {Publish service - NNS} {
+ dict exists $data nns@[::cluster::macid]
+} {1}
+test cluster-comm-2.1 {Check that new service does exists} {
+ dict exists $data foo@bar
+} {1}
+
+###
+# Modify a service
+###
+::cluster::configure foo@bar {color pink}
+::cluster::ping nns@$macid
+
+set data [::cluster::search foo@bar]
+test cluster-comm-2.3 {Modify a service} {
+ dict get $data foo@bar color
+} {pink}
+
+::cluster::configure foo@bar {color blue}
+::cluster::ping nns@$macid
+
+set data [::cluster::search foo@bar]
+test cluster-comm-2.4 {Modify a service} {
+ dict get $data foo@bar color
+} {blue}
+
+
+###
+# Create another client in a seperate interp
+###
+interp create otherclient
+interp eval otherclient [list set testutilsscript $testutilsscript]
+interp eval otherclient {
+ source $testutilsscript
+ set ::WHOAMI Other
+
+ package require tcltest
+ testsNeedTcl 8
+ testsNeedTcltest 1.0
+
+ support {
+ use snit/snit2.tcl snit
+ use comm/comm.tcl comm
+ use dns/ip.tcl ip
+ use nettool/nettool.tcl nettool
+ use cron/cron.tcl cron
+ use uuid/uuid.tcl uuid
+ use interp/interp.tcl interp
+ use log/logger.tcl logger
+ use md5/md5x.tcl md5
+ }
+ testing {
+ use nns/nns_cluster.tcl nameserv::cluster
+ }
+
+ ###
+ # Cheat and let this server know the server is local
+ ###
+ set macid [::cluster::macid]
+ set myport [::nettool::allocate_port 10000]
+
+ set url other@$macid
+ ::comm::comm new $url -port $myport -local 0 -listen 1
+ ::cluster::publish $url [list port $myport protocol comm class comm]
+}
+::cluster::ping nns@$macid
+
+set data [::cluster::search *]
+test cluster-comm-3.0 {Publish service - NNS} {
+ dict exists $data nns@[::cluster::macid]
+} {1}
+test cluster-comm-3.1 {Check that new service does exists} {
+ dict exists $data foo@bar
+} {1}
+test cluster-comm-3.3 {Check that other service does exists} {
+ dict exists $data other@[::cluster::macid]
+} {1}
+
+test cluster-comm-3.3 {Check that other service does exists} {
+ set chan [::cluster::resolve other@[::cluster::macid]]
+ ::comm::comm send $chan {set foo b}
+} {b}
+
+###
+# Remove the phony service
+###
+::cluster::unpublish foo@bar {}
+::cluster::ping nns@$macid
+
+set data [::cluster::search *]
+test cluster-comm-4.0 {Publish service - NNS} {
+ dict exists $data nns@[::cluster::macid]
+} {1}
+test cluster-comm-4.1 {Check that service is closed} {
+ dict exists $data foo@bar
+} {0}
+
+###
+# Have a non-existant service fail
+###
+test cluster-comm-5.0 {Service lookup failture} {
+ catch {cluster::resolve foo@bar} pat
+} {1}
+#puts $pat
+
+testsuiteCleanup
+return