Skip to content

Commit faf0791

Browse files
committed
Add integration test for CBOR-enabled dynamic client watches.
1 parent 1a16c2d commit faf0791

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

test/integration/client/dynamic_client_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ limitations under the License.
1717
package client
1818

1919
import (
20+
"bytes"
2021
"context"
2122
"encoding/json"
2223
"fmt"
24+
"io"
2325
"net/http"
2426
"reflect"
2527
"testing"
@@ -32,6 +34,7 @@ import (
3234
"k8s.io/apimachinery/pkg/fields"
3335
"k8s.io/apimachinery/pkg/runtime"
3436
"k8s.io/apimachinery/pkg/runtime/schema"
37+
cbor "k8s.io/apimachinery/pkg/runtime/serializer/cbor/direct"
3538
"k8s.io/apimachinery/pkg/types"
3639
"k8s.io/apimachinery/pkg/util/wait"
3740
"k8s.io/apimachinery/pkg/watch"
@@ -137,6 +140,59 @@ func TestDynamicClientWatch(t *testing.T) {
137140
t.Fatalf("unexpected error creating dynamic client: %v", err)
138141
}
139142

143+
testDynamicClientWatch(t, client, dynamicClient)
144+
}
145+
146+
func TestDynamicClientWatchWithCBOR(t *testing.T) {
147+
framework.EnableCBORServingAndStorageForTest(t)
148+
framework.SetTestOnlyCBORClientFeatureGatesForTest(t, true, true)
149+
150+
result := kubeapiservertesting.StartTestServerOrDie(t, nil, framework.DefaultTestServerFlags(), framework.SharedEtcd())
151+
defer result.TearDownFn()
152+
153+
client := clientset.NewForConfigOrDie(result.ClientConfig)
154+
dynamicClientConfig := rest.CopyConfig(result.ClientConfig)
155+
dynamicClientConfig.Wrap(framework.AssertRequestResponseAsCBOR(t))
156+
dynamicClientConfig.Wrap(func(rt http.RoundTripper) http.RoundTripper {
157+
return roundTripperFunc(func(request *http.Request) (*http.Response, error) {
158+
response, rterr := rt.RoundTrip(request)
159+
if rterr != nil {
160+
return response, rterr
161+
}
162+
163+
// We can't synchronously inspect streaming responses, so tee to a buffer
164+
// and inspect it at the end of the test.
165+
var buf bytes.Buffer
166+
response.Body = struct {
167+
io.Reader
168+
io.Closer
169+
}{
170+
Reader: io.TeeReader(response.Body, &buf),
171+
Closer: response.Body,
172+
}
173+
t.Cleanup(func() {
174+
var event metav1.WatchEvent
175+
if err := cbor.Unmarshal(buf.Bytes(), &event); err != nil {
176+
t.Errorf("non-cbor event: 0x%x", buf.Bytes())
177+
return
178+
}
179+
if err := cbor.Unmarshal(event.Object.Raw, new(interface{})); err != nil {
180+
t.Errorf("non-cbor event object: 0x%x", buf.Bytes())
181+
}
182+
})
183+
184+
return response, rterr
185+
})
186+
})
187+
dynamicClient, err := dynamic.NewForConfig(dynamicClientConfig)
188+
if err != nil {
189+
t.Fatalf("unexpected error creating dynamic client: %v", err)
190+
}
191+
192+
testDynamicClientWatch(t, client, dynamicClient)
193+
}
194+
195+
func testDynamicClientWatch(t *testing.T, client clientset.Interface, dynamicClient dynamic.Interface) {
140196
resource := corev1.SchemeGroupVersion.WithResource("events")
141197

142198
mkEvent := func(i int) *corev1.Event {

0 commit comments

Comments
 (0)