Skip to content

Commit 53a8e6d

Browse files
authored
Merge pull request #242 from HyperloopUPV-H8/backend/sender
[Backend] packet sender panic fix
2 parents abd8861 + dae783f commit 53a8e6d

2 files changed

Lines changed: 46 additions & 10 deletions

File tree

go.work

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ go 1.21.3
22

33
use (
44
./backend
5-
./state-order-tester
5+
./packet-sender
66
./scripts
7+
./state-order-tester
78
)

packet-sender/PacketGenerator.go

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ type PacketGenerator struct {
1818
}
1919

2020
func New() PacketGenerator {
21-
adj, err := adj.NewADJ("main", true)
21+
adj, err := adj.NewADJ("HVSCU-Cabinet", false)
2222
if err != nil {
2323
log.Fatalf("Failed to load ADJ: %v\n", err)
2424
}
@@ -55,30 +55,65 @@ func New() PacketGenerator {
5555
}
5656

5757
func (pg *PacketGenerator) CreateRandomPacket() []byte {
58+
if len(pg.packets) == 0 {
59+
60+
return nil
61+
}
62+
5863
randomIndex := rand.Int63n(int64(len(pg.packets)))
5964
randomPacket := pg.packets[randomIndex]
6065

61-
buff := bytes.NewBuffer(make([]byte, 0))
66+
if len(randomPacket.Measurements) == 0 {
6267

68+
log.Printf("The packet with ID %d has no measurements\n", randomPacket.ID)
69+
return nil
70+
}
71+
72+
buff := bytes.NewBuffer(make([]byte, 0))
6373
binary.Write(buff, binary.LittleEndian, randomPacket.ID)
6474

6575
for _, measurement := range randomPacket.Measurements {
6676
if strings.Contains(measurement.Type, "enum") {
67-
binary.Write(buff, binary.LittleEndian, uint8(rand.Int63n(int64(len(strings.Split(strings.ReplaceAll(strings.TrimSuffix(strings.TrimPrefix(measurement.Type, "enum("), ")"), " ", ""), ","))))))
77+
78+
list := strings.Split(strings.ReplaceAll(strings.TrimSuffix(strings.TrimPrefix(measurement.Type, "enum("), ")"), " ", ""), ",")
79+
if len(list) == 0 {
80+
81+
log.Printf("Empty list for enum: %v\n", measurement.Type)
82+
continue
83+
}
84+
85+
randomIndex := rand.Int63n(int64(len(list)))
86+
if randomIndex >= 0 && randomIndex < int64(len(list)) {
87+
binary.Write(buff, binary.LittleEndian, uint8(randomIndex))
88+
} else {
89+
90+
log.Printf("Index out of range for enum: %v, index: %d, length: %d\n", measurement.Type, randomIndex, len(list))
91+
continue
92+
}
6893
} else if measurement.Type == "bool" {
94+
6995
binary.Write(buff, binary.LittleEndian, rand.Int31n(2) == 1)
7096
} else if measurement.Type != "string" {
97+
7198
var number float64
72-
if len(measurement.WarningRange) == 0 {
73-
number = mapNumberToRange(rand.Float64(), measurement.WarningRange, measurement.Type)
74-
} else {
75-
number = mapNumberToRange(rand.Float64(), []float64{measurement.WarningRange[0] * 0.8, measurement.WarningRange[1] * 1.2}, measurement.Type)
99+
if len(measurement.WarningRange) < 2 {
100+
101+
continue
76102
}
103+
104+
number = mapNumberToRange(
105+
rand.Float64(),
106+
[]float64{
107+
measurement.WarningRange[0] * 0.8,
108+
measurement.WarningRange[1] * 1.2,
109+
},
110+
measurement.Type,
111+
)
77112
writeNumberAsBytes(number, measurement.Type, buff)
78113
} else {
79-
return nil
80-
}
81114

115+
continue
116+
}
82117
}
83118

84119
return buff.Bytes()

0 commit comments

Comments
 (0)