Skip to content

Commit 20e832a

Browse files
chore: remove all the pointers
1 parent d3a2583 commit 20e832a

File tree

3 files changed

+138
-123
lines changed

3 files changed

+138
-123
lines changed

agent/agentcontainers/api_test.go

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"github.com/coder/coder/v2/agent/agentcontainers"
2727
"github.com/coder/coder/v2/agent/agentcontainers/acmock"
2828
"github.com/coder/coder/v2/agent/agentcontainers/watcher"
29-
"github.com/coder/coder/v2/coderd/util/ptr"
3029
"github.com/coder/coder/v2/codersdk"
3130
"github.com/coder/coder/v2/testutil"
3231
"github.com/coder/quartz"
@@ -1629,31 +1628,31 @@ func TestAPI(t *testing.T) {
16291628
Apps: []agentcontainers.SubAgentApp{
16301629
{
16311630
Slug: "web-app",
1632-
DisplayName: ptr.Ref("Web Application"),
1633-
URL: ptr.Ref("http://localhost:8080"),
1634-
OpenIn: ptr.Ref(codersdk.WorkspaceAppOpenInTab),
1635-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelOwner),
1636-
Icon: ptr.Ref("/icons/web.svg"),
1637-
Order: ptr.Ref(int32(1)),
1631+
DisplayName: "Web Application",
1632+
URL: "http://localhost:8080",
1633+
OpenIn: codersdk.WorkspaceAppOpenInTab,
1634+
Share: codersdk.WorkspaceAppSharingLevelOwner,
1635+
Icon: "/icons/web.svg",
1636+
Order: int32(1),
16381637
},
16391638
{
16401639
Slug: "api-server",
1641-
DisplayName: ptr.Ref("API Server"),
1642-
URL: ptr.Ref("http://localhost:3000"),
1643-
OpenIn: ptr.Ref(codersdk.WorkspaceAppOpenInSlimWindow),
1644-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelAuthenticated),
1645-
Icon: ptr.Ref("/icons/api.svg"),
1646-
Order: ptr.Ref(int32(2)),
1647-
Hidden: ptr.Ref(true),
1640+
DisplayName: "API Server",
1641+
URL: "http://localhost:3000",
1642+
OpenIn: codersdk.WorkspaceAppOpenInSlimWindow,
1643+
Share: codersdk.WorkspaceAppSharingLevelAuthenticated,
1644+
Icon: "/icons/api.svg",
1645+
Order: int32(2),
1646+
Hidden: true,
16481647
},
16491648
{
16501649
Slug: "docs",
1651-
DisplayName: ptr.Ref("Documentation"),
1652-
URL: ptr.Ref("http://localhost:4000"),
1653-
OpenIn: ptr.Ref(codersdk.WorkspaceAppOpenInTab),
1654-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelPublic),
1655-
Icon: ptr.Ref("/icons/book.svg"),
1656-
Order: ptr.Ref(int32(3)),
1650+
DisplayName: "Documentation",
1651+
URL: "http://localhost:4000",
1652+
OpenIn: codersdk.WorkspaceAppOpenInTab,
1653+
Share: codersdk.WorkspaceAppSharingLevelPublic,
1654+
Icon: "/icons/book.svg",
1655+
Order: int32(3),
16571656
},
16581657
},
16591658
},
@@ -1663,31 +1662,31 @@ func TestAPI(t *testing.T) {
16631662

16641663
// Verify first app
16651664
assert.Equal(t, "web-app", subAgent.Apps[0].Slug)
1666-
assert.Equal(t, "Web Application", *subAgent.Apps[0].DisplayName)
1667-
assert.Equal(t, "http://localhost:8080", *subAgent.Apps[0].URL)
1668-
assert.Equal(t, codersdk.WorkspaceAppOpenInTab, *subAgent.Apps[0].OpenIn)
1669-
assert.Equal(t, codersdk.WorkspaceAppSharingLevelOwner, *subAgent.Apps[0].Share)
1670-
assert.Equal(t, "/icons/web.svg", *subAgent.Apps[0].Icon)
1671-
assert.Equal(t, int32(1), *subAgent.Apps[0].Order)
1665+
assert.Equal(t, "Web Application", subAgent.Apps[0].DisplayName)
1666+
assert.Equal(t, "http://localhost:8080", subAgent.Apps[0].URL)
1667+
assert.Equal(t, codersdk.WorkspaceAppOpenInTab, subAgent.Apps[0].OpenIn)
1668+
assert.Equal(t, codersdk.WorkspaceAppSharingLevelOwner, subAgent.Apps[0].Share)
1669+
assert.Equal(t, "/icons/web.svg", subAgent.Apps[0].Icon)
1670+
assert.Equal(t, int32(1), subAgent.Apps[0].Order)
16721671

16731672
// Verify second app
16741673
assert.Equal(t, "api-server", subAgent.Apps[1].Slug)
1675-
assert.Equal(t, "API Server", *subAgent.Apps[1].DisplayName)
1676-
assert.Equal(t, "http://localhost:3000", *subAgent.Apps[1].URL)
1677-
assert.Equal(t, codersdk.WorkspaceAppOpenInSlimWindow, *subAgent.Apps[1].OpenIn)
1678-
assert.Equal(t, codersdk.WorkspaceAppSharingLevelAuthenticated, *subAgent.Apps[1].Share)
1679-
assert.Equal(t, "/icons/api.svg", *subAgent.Apps[1].Icon)
1680-
assert.Equal(t, int32(2), *subAgent.Apps[1].Order)
1681-
assert.Equal(t, true, *subAgent.Apps[1].Hidden)
1674+
assert.Equal(t, "API Server", subAgent.Apps[1].DisplayName)
1675+
assert.Equal(t, "http://localhost:3000", subAgent.Apps[1].URL)
1676+
assert.Equal(t, codersdk.WorkspaceAppOpenInSlimWindow, subAgent.Apps[1].OpenIn)
1677+
assert.Equal(t, codersdk.WorkspaceAppSharingLevelAuthenticated, subAgent.Apps[1].Share)
1678+
assert.Equal(t, "/icons/api.svg", subAgent.Apps[1].Icon)
1679+
assert.Equal(t, int32(2), subAgent.Apps[1].Order)
1680+
assert.Equal(t, true, subAgent.Apps[1].Hidden)
16821681

16831682
// Verify third app
16841683
assert.Equal(t, "docs", subAgent.Apps[2].Slug)
1685-
assert.Equal(t, "Documentation", *subAgent.Apps[2].DisplayName)
1686-
assert.Equal(t, "http://localhost:4000", *subAgent.Apps[2].URL)
1687-
assert.Equal(t, codersdk.WorkspaceAppOpenInTab, *subAgent.Apps[2].OpenIn)
1688-
assert.Equal(t, codersdk.WorkspaceAppSharingLevelPublic, *subAgent.Apps[2].Share)
1689-
assert.Equal(t, "/icons/book.svg", *subAgent.Apps[2].Icon)
1690-
assert.Equal(t, int32(3), *subAgent.Apps[2].Order)
1684+
assert.Equal(t, "Documentation", subAgent.Apps[2].DisplayName)
1685+
assert.Equal(t, "http://localhost:4000", subAgent.Apps[2].URL)
1686+
assert.Equal(t, codersdk.WorkspaceAppOpenInTab, subAgent.Apps[2].OpenIn)
1687+
assert.Equal(t, codersdk.WorkspaceAppSharingLevelPublic, subAgent.Apps[2].Share)
1688+
assert.Equal(t, "/icons/book.svg", subAgent.Apps[2].Icon)
1689+
assert.Equal(t, int32(3), subAgent.Apps[2].Order)
16911690
},
16921691
},
16931692
}

agent/agentcontainers/subagent.go

Lines changed: 79 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,81 @@ func (s SubAgent) EqualConfig(other SubAgent) bool {
4747
}
4848

4949
type SubAgentApp struct {
50-
Slug string `json:"slug"`
51-
Command *string `json:"command"`
52-
DisplayName *string `json:"displayName"`
53-
External *bool `json:"external"`
54-
Group *string `json:"group"`
55-
HealthCheck *SubAgentHealthCheck `json:"healthCheck"`
56-
Hidden *bool `json:"hidden"`
57-
Icon *string `json:"icon"`
58-
OpenIn *codersdk.WorkspaceAppOpenIn `json:"openIn"`
59-
Order *int32 `json:"order"`
60-
Share *codersdk.WorkspaceAppSharingLevel `json:"share"`
61-
Subdomain *bool `json:"subdomain"`
62-
URL *string `json:"url"`
50+
Slug string `json:"slug"`
51+
Command string `json:"command"`
52+
DisplayName string `json:"displayName"`
53+
External bool `json:"external"`
54+
Group string `json:"group"`
55+
HealthCheck SubAgentHealthCheck `json:"healthCheck"`
56+
Hidden bool `json:"hidden"`
57+
Icon string `json:"icon"`
58+
OpenIn codersdk.WorkspaceAppOpenIn `json:"openIn"`
59+
Order int32 `json:"order"`
60+
Share codersdk.WorkspaceAppSharingLevel `json:"share"`
61+
Subdomain bool `json:"subdomain"`
62+
URL string `json:"url"`
63+
}
64+
65+
func (app SubAgentApp) ToProtoApp() (*agentproto.CreateSubAgentRequest_App, error) {
66+
proto := agentproto.CreateSubAgentRequest_App{
67+
Slug: app.Slug,
68+
External: &app.External,
69+
Hidden: &app.Hidden,
70+
Order: &app.Order,
71+
Subdomain: &app.Subdomain,
72+
}
73+
74+
if app.Command != "" {
75+
proto.Command = &app.Command
76+
}
77+
if app.DisplayName != "" {
78+
proto.DisplayName = &app.DisplayName
79+
}
80+
if app.Group != "" {
81+
proto.Group = &app.Group
82+
}
83+
if app.Icon != "" {
84+
proto.Icon = &app.Icon
85+
}
86+
if app.URL != "" {
87+
proto.Url = &app.URL
88+
}
89+
90+
if app.HealthCheck.URL != "" {
91+
proto.Healthcheck = &agentproto.CreateSubAgentRequest_App_Healthcheck{
92+
Interval: app.HealthCheck.Interval,
93+
Threshold: app.HealthCheck.Threshold,
94+
Url: app.HealthCheck.URL,
95+
}
96+
}
97+
98+
if app.OpenIn != "" {
99+
switch app.OpenIn {
100+
case codersdk.WorkspaceAppOpenInSlimWindow:
101+
proto.OpenIn = agentproto.CreateSubAgentRequest_App_SLIM_WINDOW.Enum()
102+
case codersdk.WorkspaceAppOpenInTab:
103+
proto.OpenIn = agentproto.CreateSubAgentRequest_App_TAB.Enum()
104+
default:
105+
return nil, xerrors.Errorf("unexpected codersdk.WorkspaceAppOpenIn: %#v", app.OpenIn)
106+
}
107+
}
108+
109+
if app.Share != "" {
110+
switch app.Share {
111+
case codersdk.WorkspaceAppSharingLevelAuthenticated:
112+
proto.Share = agentproto.CreateSubAgentRequest_App_AUTHENTICATED.Enum()
113+
case codersdk.WorkspaceAppSharingLevelOwner:
114+
proto.Share = agentproto.CreateSubAgentRequest_App_OWNER.Enum()
115+
case codersdk.WorkspaceAppSharingLevelPublic:
116+
proto.Share = agentproto.CreateSubAgentRequest_App_PUBLIC.Enum()
117+
case codersdk.WorkspaceAppSharingLevelOrganization:
118+
proto.Share = agentproto.CreateSubAgentRequest_App_ORGANIZATION.Enum()
119+
default:
120+
return nil, xerrors.Errorf("unexpected codersdk.WorkspaceAppSharingLevel: %#v", app.Share)
121+
}
122+
}
123+
124+
return &proto, nil
63125
}
64126

65127
type SubAgentHealthCheck struct {
@@ -151,58 +213,12 @@ func (a *subAgentAPIClient) Create(ctx context.Context, agent SubAgent) (SubAgen
151213

152214
apps := make([]*agentproto.CreateSubAgentRequest_App, 0, len(agent.Apps))
153215
for _, app := range agent.Apps {
154-
var healthCheck *agentproto.CreateSubAgentRequest_App_Healthcheck
155-
if app.HealthCheck != nil {
156-
healthCheck = &agentproto.CreateSubAgentRequest_App_Healthcheck{
157-
Interval: app.HealthCheck.Interval,
158-
Threshold: app.HealthCheck.Threshold,
159-
Url: app.HealthCheck.URL,
160-
}
161-
}
162-
163-
var openIn *agentproto.CreateSubAgentRequest_App_OpenIn
164-
if app.OpenIn != nil {
165-
switch *app.OpenIn {
166-
case codersdk.WorkspaceAppOpenInSlimWindow:
167-
openIn = agentproto.CreateSubAgentRequest_App_SLIM_WINDOW.Enum()
168-
case codersdk.WorkspaceAppOpenInTab:
169-
openIn = agentproto.CreateSubAgentRequest_App_TAB.Enum()
170-
default:
171-
return SubAgent{}, xerrors.Errorf("unexpected codersdk.WorkspaceAppOpenIn: %#v", app.OpenIn)
172-
}
173-
}
174-
175-
var share *agentproto.CreateSubAgentRequest_App_SharingLevel
176-
if app.Share != nil {
177-
switch *app.Share {
178-
case codersdk.WorkspaceAppSharingLevelAuthenticated:
179-
share = agentproto.CreateSubAgentRequest_App_AUTHENTICATED.Enum()
180-
case codersdk.WorkspaceAppSharingLevelOwner:
181-
share = agentproto.CreateSubAgentRequest_App_OWNER.Enum()
182-
case codersdk.WorkspaceAppSharingLevelPublic:
183-
share = agentproto.CreateSubAgentRequest_App_PUBLIC.Enum()
184-
case codersdk.WorkspaceAppSharingLevelOrganization:
185-
share = agentproto.CreateSubAgentRequest_App_ORGANIZATION.Enum()
186-
default:
187-
return SubAgent{}, xerrors.Errorf("unexpected codersdk.WorkspaceAppSharingLevel: %#v", app.Share)
188-
}
216+
protoApp, err := app.ToProtoApp()
217+
if err != nil {
218+
return SubAgent{}, xerrors.Errorf("convert app: %w", err)
189219
}
190220

191-
apps = append(apps, &agentproto.CreateSubAgentRequest_App{
192-
Slug: app.Slug,
193-
Command: app.Command,
194-
DisplayName: app.DisplayName,
195-
External: app.External,
196-
Group: app.Group,
197-
Healthcheck: healthCheck,
198-
Hidden: app.Hidden,
199-
Icon: app.Icon,
200-
OpenIn: openIn,
201-
Order: app.Order,
202-
Share: share,
203-
Subdomain: app.Subdomain,
204-
Url: app.URL,
205-
})
221+
apps = append(apps, protoApp)
206222
}
207223

208224
resp, err := a.api.CreateSubAgent(ctx, &agentproto.CreateSubAgentRequest{

agent/agentcontainers/subagent_test.go

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -131,22 +131,22 @@ func TestSubAgentClient_CreateWithDisplayApps(t *testing.T) {
131131
apps: []agentcontainers.SubAgentApp{
132132
{
133133
Slug: "jupyter",
134-
Command: ptr.Ref("jupyter lab --port=8888"),
135-
DisplayName: ptr.Ref("Jupyter Lab"),
136-
External: ptr.Ref(false),
137-
Group: ptr.Ref("Development"),
138-
HealthCheck: &agentcontainers.SubAgentHealthCheck{
134+
Command: "jupyter lab --port=8888",
135+
DisplayName: "Jupyter Lab",
136+
External: false,
137+
Group: "Development",
138+
HealthCheck: agentcontainers.SubAgentHealthCheck{
139139
Interval: 30,
140140
Threshold: 3,
141141
URL: "http://localhost:8888/api",
142142
},
143-
Hidden: ptr.Ref(false),
144-
Icon: ptr.Ref("/icon/jupyter.svg"),
145-
OpenIn: ptr.Ref(codersdk.WorkspaceAppOpenInTab),
146-
Order: ptr.Ref(int32(1)),
147-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelAuthenticated),
148-
Subdomain: ptr.Ref(true),
149-
URL: ptr.Ref("http://localhost:8888"),
143+
Hidden: false,
144+
Icon: "/icon/jupyter.svg",
145+
OpenIn: codersdk.WorkspaceAppOpenInTab,
146+
Order: int32(1),
147+
Share: codersdk.WorkspaceAppSharingLevelAuthenticated,
148+
Subdomain: true,
149+
URL: "http://localhost:8888",
150150
},
151151
},
152152
expectedApps: []*agentproto.CreateSubAgentRequest_App{
@@ -176,19 +176,19 @@ func TestSubAgentClient_CreateWithDisplayApps(t *testing.T) {
176176
apps: []agentcontainers.SubAgentApp{
177177
{
178178
Slug: "owner-app",
179-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelOwner),
179+
Share: codersdk.WorkspaceAppSharingLevelOwner,
180180
},
181181
{
182182
Slug: "authenticated-app",
183-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelAuthenticated),
183+
Share: codersdk.WorkspaceAppSharingLevelAuthenticated,
184184
},
185185
{
186186
Slug: "public-app",
187-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelPublic),
187+
Share: codersdk.WorkspaceAppSharingLevelPublic,
188188
},
189189
{
190190
Slug: "organization-app",
191-
Share: ptr.Ref(codersdk.WorkspaceAppSharingLevelOrganization),
191+
Share: codersdk.WorkspaceAppSharingLevelOrganization,
192192
},
193193
},
194194
expectedApps: []*agentproto.CreateSubAgentRequest_App{
@@ -215,7 +215,7 @@ func TestSubAgentClient_CreateWithDisplayApps(t *testing.T) {
215215
apps: []agentcontainers.SubAgentApp{
216216
{
217217
Slug: "health-app",
218-
HealthCheck: &agentcontainers.SubAgentHealthCheck{
218+
HealthCheck: agentcontainers.SubAgentHealthCheck{
219219
Interval: 60,
220220
Threshold: 5,
221221
URL: "http://localhost:3000/health",
@@ -271,12 +271,12 @@ func TestSubAgentClient_CreateWithDisplayApps(t *testing.T) {
271271
assert.Equal(t, expectedApp.Slug, actualApp.Slug)
272272
assert.Equal(t, expectedApp.Command, actualApp.Command)
273273
assert.Equal(t, expectedApp.DisplayName, actualApp.DisplayName)
274-
assert.Equal(t, expectedApp.External, actualApp.External)
274+
assert.Equal(t, ptr.NilToEmpty(expectedApp.External), ptr.NilToEmpty(actualApp.External))
275275
assert.Equal(t, expectedApp.Group, actualApp.Group)
276-
assert.Equal(t, expectedApp.Hidden, actualApp.Hidden)
276+
assert.Equal(t, ptr.NilToEmpty(expectedApp.Hidden), ptr.NilToEmpty(actualApp.Hidden))
277277
assert.Equal(t, expectedApp.Icon, actualApp.Icon)
278-
assert.Equal(t, expectedApp.Order, actualApp.Order)
279-
assert.Equal(t, expectedApp.Subdomain, actualApp.Subdomain)
278+
assert.Equal(t, ptr.NilToEmpty(expectedApp.Order), ptr.NilToEmpty(actualApp.Order))
279+
assert.Equal(t, ptr.NilToEmpty(expectedApp.Subdomain), ptr.NilToEmpty(actualApp.Subdomain))
280280
assert.Equal(t, expectedApp.Url, actualApp.Url)
281281

282282
if expectedApp.OpenIn != nil {

0 commit comments

Comments
 (0)