Skip to content

Commit bb65746

Browse files
committed
refactor
1 parent 502c1e9 commit bb65746

File tree

1 file changed

+50
-53
lines changed

1 file changed

+50
-53
lines changed

internal/proto5server/server_listresource_tfprotov5_test.go

Lines changed: 50 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,44 @@ func diagnosticResult(format string, args ...any) tfprotov5.ListResourceResult {
4040
},
4141
},
4242
}
43+
}
44+
45+
// Mimic SDK GRPCProviderServer.ReadResource ResourceData -> MsgPack
46+
func NewProtoV5ListResult(d *sdk.ResourceData, displayName string) tfprotov5.ListResourceResult {
47+
state := d.State()
48+
if state == nil {
49+
return diagnosticResult("Expected state to be non-nil")
50+
}
4351

52+
schemaBlock := sdkResource.CoreConfigSchema()
53+
if schemaBlock == nil {
54+
return diagnosticResult("Expected schemaBlock to be non-nil")
55+
}
56+
57+
// We've copied hcl2shim wholesale for purposes of making the test pass
58+
newStateVal, err := hcl2shim.HCL2ValueFromFlatmap(state.Attributes, schemaBlock.ImpliedType())
59+
if err != nil {
60+
return diagnosticResult("Error converting state attributes to HCL2 value: %v", err)
61+
}
62+
63+
// Think about this later
64+
// newStateVal = normalizeNullValues(newStateVal, stateVal, false)
65+
66+
pack, err := msgpack.Marshal(newStateVal, schemaBlock.ImpliedType())
67+
if err != nil {
68+
return diagnosticResult("Error marshaling new state value to MsgPack: %v", err)
69+
}
70+
71+
fmt.Printf("MsgPack: %s\n", pack)
72+
73+
listResult := tfprotov5.ListResourceResult{}
74+
listResult.Resource = &tfprotov5.DynamicValue{MsgPack: pack}
75+
listResult.DisplayName = displayName
76+
77+
return listResult
4478
}
45-
func listFunc(ctx context.Context, req list.ListRequest, stream *list.ListResultsStream) {
4679

80+
func listFunc(ctx context.Context, req list.ListRequest, stream *list.ListResultsStream) {
4781
// This likely gets refactored info as an "adapter" / "mux" concern.
4882
sdkResource, ok := SDKResourceFromContext(ctx)
4983
if !ok {
@@ -71,65 +105,27 @@ func listFunc(ctx context.Context, req list.ListRequest, stream *list.ListResult
71105

72106
displayName := "I am Groot"
73107

74-
// Mimic SDK GRPCProviderServer.ReadResource ResourceData -> MsgPack
75-
// All this logic belongs in an "adapter" concern
76-
//
77-
// e.g. NewProtoV5ListResult(data *ResourceData, displayName string, diag sdkdiag.Diagnostics)
78-
state := d.State()
79-
if state == nil {
80-
push(diagnosticResult("Expected state to be non-nil"))
81-
return
82-
}
83-
84-
schemaBlock := sdkResource.CoreConfigSchema()
85-
if schemaBlock == nil {
86-
push(diagnosticResult("Expected schemaBlock to be non-nil"))
87-
return
88-
}
89-
90-
// We've copied hcl2shim wholesale for purposes of making the test pass
91-
newStateVal, err := hcl2shim.HCL2ValueFromFlatmap(state.Attributes, schemaBlock.ImpliedType())
92-
if err != nil {
93-
push(diagnosticResult("Error converting state attributes to HCL2 value: %v", err))
94-
return
95-
}
96-
97-
// Think about this later
98-
// newStateVal = normalizeNullValues(newStateVal, stateVal, false)
99-
100-
pack, err := msgpack.Marshal(newStateVal, schemaBlock.ImpliedType())
101-
if err != nil {
102-
push(diagnosticResult("Error marshaling new state value to MsgPack: %v", err))
103-
return
104-
}
105-
106-
fmt.Printf("MsgPack: %s\n", pack)
107-
108-
// Construct a tfprotov5.ListResourceResult
109-
listResult := tfprotov5.ListResourceResult{}
110-
listResult.Resource = &tfprotov5.DynamicValue{MsgPack: pack}
111-
listResult.DisplayName = displayName
112-
108+
listResult := NewProtoV5ListResult(d, displayName)
113109
if !push(listResult) {
114110
return
115111
}
116112
}
117113
}
118114

119-
func TestServerListResourceProto5ToProto5(t *testing.T) {
120-
t.Parallel()
121-
122-
server := func(listResource func() list.ListResource) *Server {
123-
return &Server{
124-
FrameworkServer: fwserver.Server{
125-
Provider: &testprovider.Provider{
126-
ListResourcesMethod: func(ctx context.Context) []func() list.ListResource {
127-
return []func() list.ListResource{listResource}
128-
},
115+
func newServer(listResource func() list.ListResource) *Server {
116+
return &Server{
117+
FrameworkServer: fwserver.Server{
118+
Provider: &testprovider.Provider{
119+
ListResourcesMethod: func(ctx context.Context) []func() list.ListResource {
120+
return []func() list.ListResource{listResource}
129121
},
130122
},
131-
}
123+
},
132124
}
125+
}
126+
127+
func TestServerListResourceProto5ToProto5(t *testing.T) {
128+
t.Parallel()
133129

134130
listResource := func() list.ListResource {
135131
return &testprovider.ListResource{
@@ -139,15 +135,16 @@ func TestServerListResourceProto5ToProto5(t *testing.T) {
139135
},
140136
}
141137
}
142-
aServer := server(listResource)
138+
139+
server := newServer(listResource)
143140

144141
ctx := context.Background()
145142
ctx = NewContextWithSDKResource(ctx, &sdkResource)
146143
req := &tfprotov5.ListResourceRequest{
147144
TypeName: "test_resource",
148145
}
149146

150-
stream, err := aServer.ListResource(ctx, req)
147+
stream, err := server.ListResource(ctx, req)
151148
if err != nil {
152149
t.Fatalf("unexpected error returned from ListResource: %v", err)
153150
}

0 commit comments

Comments
 (0)