forked from TheThingsArchive/ttn
/
random.go
138 lines (123 loc) · 4.67 KB
/
random.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Copyright © 2017 The Things Network
// Use of this source code is governed by the MIT license that can be found in the LICENSE file.
package broker
import (
"math/rand"
"time"
"github.com/TheThingsNetwork/ttn/api/gateway"
"github.com/TheThingsNetwork/ttn/api/protocol"
"github.com/TheThingsNetwork/ttn/api/protocol/lorawan"
"github.com/TheThingsNetwork/ttn/utils/random"
)
func randomDeduplicatedUplinkMessage() *DeduplicatedUplinkMessage {
appEui := random.AppEUI()
devEui := random.DevEUI()
md := make([]*gateway.RxMetadata, random.Intn(10))
for i := range md {
md[i] = gateway.RandomRxMetadata()
}
return &DeduplicatedUplinkMessage{
AppEui: &appEui,
DevEui: &devEui,
AppId: random.AppID(),
DevId: random.DevID(),
GatewayMetadata: md,
}
}
// RandomLorawanDeduplicatedJoinRequest returns randomly generated lorawan join request.
// Used for testing.
func RandomLorawanDeduplicatedJoinRequest(modulation ...lorawan.Modulation) *DeduplicatedUplinkMessage {
msg := randomDeduplicatedUplinkMessage()
msg.ProtocolMetadata = protocol.RandomLorawanRxMetadata(modulation...)
msg.Payload = lorawan.RandomPayload(lorawan.MType_JOIN_REQUEST)
return msg
}
// RandomLorawanConfirmedDeduplicatedUplink returns randomly generated confirmed lorawan uplink message.
// Used for testing.
func RandomLorawanConfirmedDeduplicatedUplink(modulation ...lorawan.Modulation) *DeduplicatedUplinkMessage {
msg := randomDeduplicatedUplinkMessage()
msg.ProtocolMetadata = protocol.RandomLorawanRxMetadata(modulation...)
msg.Payload = lorawan.RandomPayload(lorawan.MType_CONFIRMED_UP)
return msg
}
// RandomLorawanUnconfirmedDeduplicatedUplink returns randomly generated unconfirmed lorawan uplink message.
// Used for testing.
func RandomLorawanUnconfirmedDeduplicatedUplink(modulation ...lorawan.Modulation) *DeduplicatedUplinkMessage {
msg := randomDeduplicatedUplinkMessage()
msg.ProtocolMetadata = protocol.RandomLorawanRxMetadata(modulation...)
msg.Payload = lorawan.RandomPayload(lorawan.MType_UNCONFIRMED_UP)
return msg
}
// RandomLorawanDeduplicatedUplinkMessage returns randomly generated lorawan uplink message(join request, confirmed or unconfirmed uplink).
// Used for testing.
func RandomLorawanDeduplicatedUplinkMessage(modulation ...lorawan.Modulation) *DeduplicatedUplinkMessage {
switch rand.Intn(3) {
case 0:
return RandomLorawanDeduplicatedJoinRequest(modulation...)
case 1:
return RandomLorawanConfirmedDeduplicatedUplink(modulation...)
default:
return RandomLorawanUnconfirmedDeduplicatedUplink(modulation...)
}
}
func randomDownlinkMessage() *DownlinkMessage {
appEui := random.AppEUI()
devEui := random.DevEUI()
return &DownlinkMessage{
AppEui: &appEui,
DevEui: &devEui,
AppId: random.AppID(),
DevId: random.DevID(),
DownlinkOption: &DownlinkOption{
GatewayConfig: gateway.RandomTxConfiguration(),
ProtocolConfig: protocol.RandomTxConfiguration(),
Score: uint32(random.Intn(100)),
Deadline: int64(time.Now().Nanosecond() + random.Intn(10000)),
GatewayId: random.ID(),
Identifier: random.ID(),
},
}
}
// RandomLorawanJoinAccept returns randomly generated lorawan join request.
// Used for testing.
func RandomLorawanJoinAccept() *DownlinkMessage {
msg := randomDownlinkMessage()
msg.Payload = lorawan.RandomPayload(lorawan.MType_JOIN_ACCEPT)
return msg
}
// RandomLorawanConfirmedDownlink returns randomly generated confirmed lorawan uplink message.
// Used for testing.
func RandomLorawanConfirmedDownlink() *DownlinkMessage {
msg := randomDownlinkMessage()
msg.Payload = lorawan.RandomPayload(lorawan.MType_CONFIRMED_DOWN)
return msg
}
// RandomLorawanUnconfirmedDownlink returns randomly generated unconfirmed lorawan uplink message.
// Used for testing.
func RandomLorawanUnconfirmedDownlink() *DownlinkMessage {
msg := randomDownlinkMessage()
msg.Payload = lorawan.RandomPayload(lorawan.MType_UNCONFIRMED_DOWN)
return msg
}
// RandomLorawanDownlinkMessage returns randomly generated lorawan downlink message(join request, confirmed or unconfirmed downlink).
// Used for testing.
func RandomLorawanDownlinkMessage() *DownlinkMessage {
switch rand.Intn(3) {
case 0:
return RandomLorawanJoinAccept()
case 1:
return RandomLorawanConfirmedDownlink()
default:
return RandomLorawanUnconfirmedDownlink()
}
}
// RandomDeduplicatedUplinkMessage returns randomly generated uplink message.
// Used for testing.
func RandomDeduplicatedUplinkMessage() *DeduplicatedUplinkMessage {
return RandomLorawanDeduplicatedUplinkMessage()
}
// RandomDownlinkMessage returns randomly generated downlink message.
// Used for testing.
func RandomDownlinkMessage() *DownlinkMessage {
return RandomLorawanDownlinkMessage()
}