71 lines
1.6 KiB
Go
71 lines
1.6 KiB
Go
|
package bluetooth
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func TestCreateAdvertisementPayload(t *testing.T) {
|
||
|
type testCase struct {
|
||
|
raw string
|
||
|
parsed AdvertisementOptions
|
||
|
}
|
||
|
tests := []testCase{
|
||
|
{
|
||
|
raw: "\x02\x01\x06", // flags
|
||
|
parsed: AdvertisementOptions{},
|
||
|
},
|
||
|
{
|
||
|
raw: "\x02\x01\x06", // flags
|
||
|
parsed: AdvertisementOptions{
|
||
|
// Interval doesn't affect the advertisement payload.
|
||
|
Interval: NewDuration(100 * time.Millisecond),
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
raw: "\x02\x01\x06" + // flags
|
||
|
"\x07\x09foobar", // local name
|
||
|
parsed: AdvertisementOptions{
|
||
|
LocalName: "foobar",
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
raw: "\x02\x01\x06" + // flags
|
||
|
"\x0b\x09Heart rate" + // local name
|
||
|
"\x03\x03\x0d\x18", // service UUID
|
||
|
parsed: AdvertisementOptions{
|
||
|
LocalName: "Heart rate",
|
||
|
ServiceUUIDs: []UUID{
|
||
|
ServiceUUIDHeartRate,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
// Note: the two service UUIDs should really be merged into one to
|
||
|
// save space.
|
||
|
raw: "\x02\x01\x06" + // flags
|
||
|
"\x0b\x09Heart rate" + // local name
|
||
|
"\x03\x03\x0d\x18" + // heart rate service UUID
|
||
|
"\x03\x03\x0f\x18", // battery service UUID
|
||
|
parsed: AdvertisementOptions{
|
||
|
LocalName: "Heart rate",
|
||
|
ServiceUUIDs: []UUID{
|
||
|
ServiceUUIDHeartRate,
|
||
|
ServiceUUIDBattery,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
for _, tc := range tests {
|
||
|
var expectedRaw rawAdvertisementPayload
|
||
|
expectedRaw.len = uint8(len(tc.raw))
|
||
|
copy(expectedRaw.data[:], tc.raw)
|
||
|
|
||
|
var raw rawAdvertisementPayload
|
||
|
raw.addFromOptions(tc.parsed)
|
||
|
if raw != expectedRaw {
|
||
|
t.Errorf("error when serializing options: %#v\nexpected: %#v\nactual: %#v\n", tc.parsed, tc.raw, string(raw.data[:raw.len]))
|
||
|
}
|
||
|
}
|
||
|
}
|