Address: interface and implementation
This commit is contained in:
parent
ea91a0486e
commit
e1bc2322f3
5 changed files with 91 additions and 11 deletions
|
@ -47,8 +47,11 @@ type Context interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Address interface {
|
type Address interface {
|
||||||
|
Url() string
|
||||||
Service() string
|
Service() string
|
||||||
Send(Context, Message)
|
Interaction() (string, string)
|
||||||
|
SetUrl(string)
|
||||||
|
SetInteraction(string, string)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Message interface {
|
type Message interface {
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
package message
|
package message
|
||||||
|
|
||||||
import "git.sr.ht/~cco/go-scopes/lib"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.sr.ht/~cco/go-scopes/lib"
|
||||||
|
)
|
||||||
|
|
||||||
// Message implementation(s)
|
// Message implementation(s)
|
||||||
|
|
||||||
|
@ -23,19 +28,56 @@ var Quit = StrMessage("quit")
|
||||||
// Address implementation
|
// Address implementation
|
||||||
|
|
||||||
type address struct {
|
type address struct {
|
||||||
service string
|
url, srv, sid, iid string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (addr *address) String() string {
|
||||||
|
return fmt.Sprintf("%s#%s/%s/%s", addr.url, addr.srv, addr.sid, addr.iid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (addr *address) Url() string {
|
||||||
|
return addr.url
|
||||||
}
|
}
|
||||||
|
|
||||||
func (addr *address) Service() string {
|
func (addr *address) Service() string {
|
||||||
return addr.service
|
return addr.srv
|
||||||
}
|
}
|
||||||
|
|
||||||
func (addr *address) Send(ctx lib.Context, msg lib.Message) {
|
func (addr *address) Interaction() (sid, iid string) {
|
||||||
lib.Send(ctx, addr, msg)
|
return addr.sid, addr.iid
|
||||||
|
}
|
||||||
|
|
||||||
|
func (addr *address) SetUrl(url string) {
|
||||||
|
addr.url = url
|
||||||
|
}
|
||||||
|
|
||||||
|
func (addr *address) SetInteraction(sid, iid string) {
|
||||||
|
addr.sid = sid
|
||||||
|
addr.iid = iid
|
||||||
}
|
}
|
||||||
|
|
||||||
func SimpleAddress(srv string) *address {
|
func SimpleAddress(srv string) *address {
|
||||||
return &address{
|
return &address{
|
||||||
service: srv,
|
srv: srv,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ParseAddress(astr string) *address {
|
||||||
|
addr := address{}
|
||||||
|
p1 := strings.SplitN(astr, "#", 2)
|
||||||
|
s1 := p1[0]
|
||||||
|
s2 := s1
|
||||||
|
if len(p1) > 1 {
|
||||||
|
addr.url = s1
|
||||||
|
s2 = p1[1]
|
||||||
|
}
|
||||||
|
p2 := strings.Split(s2, "/")
|
||||||
|
addr.srv = p2[0]
|
||||||
|
if len(p2) > 1 {
|
||||||
|
addr.sid = p2[1]
|
||||||
|
if len(p2) > 2 {
|
||||||
|
addr.iid = p2[2]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &addr
|
||||||
|
}
|
||||||
|
|
|
@ -55,12 +55,12 @@ func (t *T) TearDownApp() {
|
||||||
// give actors time to recieve all messages:
|
// give actors time to recieve all messages:
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
//t.Check()
|
//t.Check()
|
||||||
message.SimpleAddress("testing").Send(t.Ctx, message.Quit)
|
lib.Send(t.Ctx, message.SimpleAddress("testing"), message.Quit)
|
||||||
t.Ctx.WaitGroup().Wait()
|
t.Ctx.WaitGroup().Wait()
|
||||||
//t.AssertNoUncheckedMessages()
|
//t.AssertNoUncheckedMessages()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *T) LogCount(pr bool) int {
|
func (t *T) LogCheck(pr bool) int {
|
||||||
count := 0
|
count := 0
|
||||||
f, _ := os.Open("log/scopes.log")
|
f, _ := os.Open("log/scopes.log")
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
"git.sr.ht/~cco/go-scopes/tests/etc"
|
"git.sr.ht/~cco/go-scopes/tests/etc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConfig(tb *tbase.T) {
|
func TestScopesApp(tb *tbase.T) {
|
||||||
os.Remove("log/scopes.log") // make sure we start with a fresh log file
|
os.Remove("log/scopes.log") // make sure we start with a fresh log file
|
||||||
t := testing.SetUpApp(tb, etc.Config())
|
t := testing.SetUpApp(tb, etc.Config())
|
||||||
t.Run("app", AppTest)
|
t.Run("app", AppTest)
|
||||||
|
@ -19,7 +19,7 @@ func TestConfig(tb *tbase.T) {
|
||||||
t.Run("send", SendTest)
|
t.Run("send", SendTest)
|
||||||
t.Run("client", ClientTest)
|
t.Run("client", ClientTest)
|
||||||
t.TearDownApp()
|
t.TearDownApp()
|
||||||
t.AssertEqual(t.LogCount(true), 12)
|
t.AssertEqual(t.LogCheck(true), 12)
|
||||||
}
|
}
|
||||||
|
|
||||||
func AppTest(t *testing.T) {
|
func AppTest(t *testing.T) {
|
||||||
|
|
35
tests/unit_test.go
Normal file
35
tests/unit_test.go
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
package scopes_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
tbase "testing"
|
||||||
|
|
||||||
|
"git.sr.ht/~cco/go-scopes/lib"
|
||||||
|
"git.sr.ht/~cco/go-scopes/lib/message"
|
||||||
|
"git.sr.ht/~cco/go-scopes/testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestUnit(tb *tbase.T) {
|
||||||
|
t := testing.SetUp(tb)
|
||||||
|
t.Run("address", AddressTest)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddressTest(t *testing.T) {
|
||||||
|
var ad1 lib.Address = message.SimpleAddress("worker")
|
||||||
|
t.AssertEqual(fmt.Sprint(ad1), "#worker//")
|
||||||
|
astr := "https://scopes.cy7.eu#server/1abc/2cde"
|
||||||
|
var ad2 lib.Address = message.ParseAddress(astr)
|
||||||
|
t.AssertEqual(fmt.Sprint(ad2), astr)
|
||||||
|
t.AssertEqual(fmt.Sprint(message.ParseAddress("worker")), "#worker//")
|
||||||
|
t.AssertEqual(ad1.Url(), "")
|
||||||
|
t.AssertEqual(ad2.Url(), "https://scopes.cy7.eu")
|
||||||
|
sid, iid := ad1.Interaction()
|
||||||
|
t.AssertEqual(sid, "")
|
||||||
|
t.AssertEqual(iid, "")
|
||||||
|
sid, iid = ad2.Interaction()
|
||||||
|
t.AssertEqual(sid, "1abc")
|
||||||
|
t.AssertEqual(iid, "2cde")
|
||||||
|
ad1.SetUrl("https://scopes.cy7.eu")
|
||||||
|
ad1.SetInteraction("1abc", "2cde")
|
||||||
|
t.AssertEqual(fmt.Sprint(ad1), "https://scopes.cy7.eu#worker/1abc/2cde")
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue