mirror of https://github.com/tidwall/tile38.git
112 lines
1.9 KiB
Go
112 lines
1.9 KiB
Go
|
/*
|
||
|
* Copyright (c) 2013 IBM Corp.
|
||
|
*
|
||
|
* All rights reserved. This program and the accompanying materials
|
||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||
|
* which accompanies this distribution, and is available at
|
||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||
|
*
|
||
|
* Contributors:
|
||
|
* Seth Hoenig
|
||
|
* Allan Stockdill-Mander
|
||
|
* Mike Robertson
|
||
|
*/
|
||
|
|
||
|
package mqtt
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type DummyToken struct{}
|
||
|
|
||
|
func (d *DummyToken) Wait() bool {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func (d *DummyToken) WaitTimeout(t time.Duration) bool {
|
||
|
return true
|
||
|
}
|
||
|
|
||
|
func (d *DummyToken) flowComplete() {}
|
||
|
|
||
|
func (d *DummyToken) Error() error {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func Test_getID(t *testing.T) {
|
||
|
mids := &messageIds{index: make(map[uint16]Token)}
|
||
|
|
||
|
i1 := mids.getID(&DummyToken{})
|
||
|
|
||
|
if i1 != 1 {
|
||
|
t.Fatalf("i1 was wrong: %v", i1)
|
||
|
}
|
||
|
|
||
|
i2 := mids.getID(&DummyToken{})
|
||
|
|
||
|
if i2 != 2 {
|
||
|
t.Fatalf("i2 was wrong: %v", i2)
|
||
|
}
|
||
|
|
||
|
for i := uint16(3); i < 100; i++ {
|
||
|
id := mids.getID(&DummyToken{})
|
||
|
if id != i {
|
||
|
t.Fatalf("id was wrong expected %v got %v", i, id)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func Test_freeID(t *testing.T) {
|
||
|
mids := &messageIds{index: make(map[uint16]Token)}
|
||
|
|
||
|
i1 := mids.getID(&DummyToken{})
|
||
|
mids.freeID(i1)
|
||
|
|
||
|
if i1 != 1 {
|
||
|
t.Fatalf("i1 was wrong: %v", i1)
|
||
|
}
|
||
|
|
||
|
i2 := mids.getID(&DummyToken{})
|
||
|
fmt.Printf("i2: %v\n", i2)
|
||
|
}
|
||
|
|
||
|
func Test_messageids_mix(t *testing.T) {
|
||
|
mids := &messageIds{index: make(map[uint16]Token)}
|
||
|
|
||
|
done := make(chan bool)
|
||
|
a := make(chan uint16, 3)
|
||
|
b := make(chan uint16, 20)
|
||
|
c := make(chan uint16, 100)
|
||
|
|
||
|
go func() {
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
a <- mids.getID(&DummyToken{})
|
||
|
mids.freeID(<-b)
|
||
|
}
|
||
|
done <- true
|
||
|
}()
|
||
|
|
||
|
go func() {
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
b <- mids.getID(&DummyToken{})
|
||
|
mids.freeID(<-c)
|
||
|
}
|
||
|
done <- true
|
||
|
}()
|
||
|
|
||
|
go func() {
|
||
|
for i := 0; i < 10000; i++ {
|
||
|
c <- mids.getID(&DummyToken{})
|
||
|
mids.freeID(<-a)
|
||
|
}
|
||
|
done <- true
|
||
|
}()
|
||
|
|
||
|
<-done
|
||
|
<-done
|
||
|
<-done
|
||
|
}
|