Skip to content

Commit

Permalink
fix(hass): 🐛 catch potential nil panic from error condition and handl…
Browse files Browse the repository at this point in the history
…e appropriately
  • Loading branch information
joshuar committed May 13, 2024
1 parent 9dc5e03 commit a7a6dec
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 10 deletions.
12 changes: 6 additions & 6 deletions internal/hass/sensor/sensor.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,30 +92,30 @@ func (r *request) RequestBody() json.RawMessage {
return json.RawMessage(data)
}

func NewUpdateRequest(s ...SensorState) *request {
func NewUpdateRequest(s ...SensorState) (*request, error) {
var updates []*sensorState
for _, u := range s {
updates = append(updates, newSensorState(u))
}
data, err := json.Marshal(updates)
if err != nil {
return nil
return nil, err
}
return &request{
Data: data,
RequestType: requestTypeUpdate,
}
}, nil
}

func NewRegistrationRequest(s SensorRegistration) *request {
func NewRegistrationRequest(s SensorRegistration) (*request, error) {
data, err := json.Marshal(newSensorRegistration(s))
if err != nil {
return nil
return nil, err
}
return &request{
Data: data,
RequestType: requestTypeRegister,
}
}, nil
}

type response struct {
Expand Down
4 changes: 2 additions & 2 deletions internal/hass/sensor/sensor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ func TestNewUpdateRequest(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := NewUpdateRequest(tt.args.s...); !reflect.DeepEqual(got, tt.want) {
if got, _ := NewUpdateRequest(tt.args.s...); !reflect.DeepEqual(got, tt.want) {
t.Errorf("UpdateRequest() = %v, want %v", got, tt.want)
}
})
Expand Down Expand Up @@ -182,7 +182,7 @@ func TestNewRegistrationRequest(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := NewRegistrationRequest(tt.args.s); !reflect.DeepEqual(got, tt.want) {
if got, _ := NewRegistrationRequest(tt.args.s); !reflect.DeepEqual(got, tt.want) {
t.Errorf("RegistrationRequest() = %v, want %v", got, tt.want)
}
})
Expand Down
8 changes: 6 additions & 2 deletions internal/hass/sensor/tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,17 @@ func (t *Tracker) UpdateSensor(ctx context.Context, reg Registry, upd Details) e
}
var req hass.PostRequest
var resp hass.Response
var err error
if reg.IsRegistered(upd.ID()) {
req = NewUpdateRequest(SensorState(upd))
req, err = NewUpdateRequest(SensorState(upd))
resp = NewUpdateResponse()
} else {
req = NewRegistrationRequest(SensorRegistration(upd))
req, err = NewRegistrationRequest(SensorRegistration(upd))
resp = NewRegistrationResponse()
}
if err != nil {
return wrapErr(upd.ID(), err)
}
if err := hass.ExecuteRequest(ctx, req, resp); err != nil {
return wrapErr(upd.ID(), err)
}
Expand Down

0 comments on commit a7a6dec

Please sign in to comment.