Skip to content

Commit 9445586

Browse files
committed
Fix unchecked assertions
1 parent 11f7fcb commit 9445586

File tree

5 files changed

+38
-8
lines changed

5 files changed

+38
-8
lines changed

.golangci.yml

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ linters-settings:
3737
- name: string-of-int
3838
- name: superfluous-else
3939
- name: time-naming
40+
- name: unchecked-type-assertion
4041
- name: unexported-return
4142
- name: unnecessary-stmt
4243
- name: unreachable-code
@@ -70,6 +71,7 @@ linters:
7071
- errname
7172
- errorlint
7273
- fatcontext
74+
- forcetypeassert
7375
- ginkgolinter
7476
- gocheckcompilerdirectives
7577
- gochecksumtype

internal/framework/status/updater.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ type Updater struct {
5353
logger logr.Logger
5454
}
5555

56+
var ErrFailedAssert = errors.New("type assertion failed")
57+
5658
// NewUpdater creates a new Updater.
5759
func NewUpdater(c client.Client, logger logr.Logger) *Updater {
5860
return &Updater{
@@ -87,7 +89,12 @@ func (u *Updater) writeStatuses(
8789
resourceType ngftypes.ObjectType,
8890
statusSetter Setter,
8991
) {
90-
obj := resourceType.DeepCopyObject().(client.Object)
92+
copiedObject := resourceType.DeepCopyObject()
93+
obj, ok := copiedObject.(client.Object)
94+
if !ok {
95+
u.logger.Error(ErrFailedAssert, "object is not a client.Object")
96+
return
97+
}
9198

9299
err := wait.ExponentialBackoffWithContext(
93100
ctx,

internal/mode/static/manager.go

+12-2
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,20 @@ func StartManager(cfg config.Config) error {
200200

201201
ngxruntimeCollector = collectors.NewManagerMetricsCollector(constLabels)
202202
handlerCollector = collectors.NewControllerCollector(constLabels)
203+
204+
ngxruntimeCollector, ok := ngxruntimeCollector.(prometheus.Collector)
205+
if !ok {
206+
return fmt.Errorf("ngxruntimeCollector is not a prometheus.Collector: %w", status.ErrFailedAssert)
207+
}
208+
handlerCollector, ok := handlerCollector.(prometheus.Collector)
209+
if !ok {
210+
return fmt.Errorf("handlerCollector is not a prometheus.Collector: %w", status.ErrFailedAssert)
211+
}
212+
203213
metrics.Registry.MustRegister(
204214
ngxCollector,
205-
ngxruntimeCollector.(prometheus.Collector),
206-
handlerCollector.(prometheus.Collector),
215+
ngxruntimeCollector,
216+
handlerCollector,
207217
)
208218
}
209219

internal/mode/static/status/status_setters.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ func gwStatusEqual(prev, cur gatewayv1.GatewayStatus) bool {
8282

8383
func newHTTPRouteStatusSetter(status gatewayv1.HTTPRouteStatus, gatewayCtlrName string) frameworkStatus.Setter {
8484
return func(object client.Object) (wasSet bool) {
85-
hr := object.(*gatewayv1.HTTPRoute)
85+
hr := helpers.MustCastObject[*gatewayv1.HTTPRoute](object)
8686

8787
// keep all the parent statuses that belong to other controllers
8888
for _, os := range hr.Status.Parents {
@@ -103,7 +103,7 @@ func newHTTPRouteStatusSetter(status gatewayv1.HTTPRouteStatus, gatewayCtlrName
103103

104104
func newTLSRouteStatusSetter(status v1alpha2.TLSRouteStatus, gatewayCtlrName string) frameworkStatus.Setter {
105105
return func(object client.Object) (wasSet bool) {
106-
tr := object.(*v1alpha2.TLSRoute)
106+
tr := helpers.MustCastObject[*v1alpha2.TLSRoute](object)
107107

108108
// keep all the parent statuses that belong to other controllers
109109
for _, os := range tr.Status.Parents {
@@ -124,7 +124,7 @@ func newTLSRouteStatusSetter(status v1alpha2.TLSRouteStatus, gatewayCtlrName str
124124

125125
func newGRPCRouteStatusSetter(status gatewayv1.GRPCRouteStatus, gatewayCtlrName string) frameworkStatus.Setter {
126126
return func(object client.Object) (wasSet bool) {
127-
gr := object.(*gatewayv1.GRPCRoute)
127+
gr := helpers.MustCastObject[*gatewayv1.GRPCRoute](object)
128128

129129
// keep all the parent statuses that belong to other controllers
130130
for _, os := range gr.Status.Parents {

tests/framework/request.go

+13-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"context"
66
"crypto/tls"
7+
"errors"
78
"fmt"
89
"io"
910
"net"
@@ -41,7 +42,12 @@ func Post(url, address string, body io.Reader, timeout time.Duration) (*http.Res
4142
func makeRequest(method, url, address string, body io.Reader, timeout time.Duration) (*http.Response, error) {
4243
dialer := &net.Dialer{}
4344

44-
http.DefaultTransport.(*http.Transport).DialContext = func(
45+
transport, ok := http.DefaultTransport.(*http.Transport)
46+
if !ok {
47+
return nil, errors.New("transport is not of type *http.Transport")
48+
}
49+
50+
transport.DialContext = func(
4551
ctx context.Context,
4652
network,
4753
addr string,
@@ -61,7 +67,12 @@ func makeRequest(method, url, address string, body io.Reader, timeout time.Durat
6167

6268
var resp *http.Response
6369
if strings.HasPrefix(url, "https") {
64-
customTransport := http.DefaultTransport.(*http.Transport).Clone()
70+
transport, ok := http.DefaultTransport.(*http.Transport)
71+
if !ok {
72+
return nil, errors.New("transport is not of type *http.Transport")
73+
}
74+
75+
customTransport := transport.Clone()
6576
// similar to how in our examples with https requests we run our curl command
6677
// we turn off verification of the certificate, we do the same here
6778
customTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true} //nolint:gosec // for https test traffic

0 commit comments

Comments
 (0)