You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: customresourcedefinition_test.go
    path of file: ./repos/juju/caas/kubernetes/provider/specs
    
    the code of the file until where you have to start completion: // Copyright 2021 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.

package specs_test

import (
	"strings"

	jc "github.com/juju/testing/checkers"
	gc "gopkg.in/check.v1"
	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
	apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
	
    
func (s *crdSuite) TestK8sCustomResourceDefinitionV1Beta1(c *gc.C) {
	specV1Beta1 := `
name: tfjobs.kubeflow.org
labels:
  foo: bar
  juju-global-resource-lifecycle: model
spec:
  group: kubeflow.org
  scope: Cluster
  names:
    kind: TFJob
    singular: tfjob
    plural: tfjobs
  version: v1
  versions:
    - name: v1
      served: true
      storage: true
    - name: v1beta2
      served: true
      storage: false
  conversion:
    strategy: None
  preserveUnknownFields: false
  additionalPrinterColumns:
    - name: Worker
      type: integer
      description: Worker attribute.
      jsonPath: .spec.tfReplicaSpecs.Worker
  validation:
    openAPIV3Schema:
      properties:
        spec:
          properties:
            tfReplicaSpecs:
              properties:
                Worker:
                  properties:
                    replicas:
                      type: integer
                      minimum: 1
                PS:
                  properties:
                    replicas:
                      type: integer
                      minimum: 1
                Chief:
                  properties:
                    replicas:
                      type: integer
                      minimum: 1
                      maximum: 1
`
	var obj k8sspecs.K8sCustomResourceDefinition
	err := k8sspecs.NewStrictYAMLOrJSONDecoder(strings.NewReader(specV1Beta1), len(specV1Beta1)).Decode(&obj)
	c.Assert(err, jc.ErrorIsNil)
	c.Assert(obj, gc.DeepEquals, k8sspecs.K8sCustomResourceDefinition{
		Meta: k8sspecs.Meta{
			Name: "tfjobs.kubeflow.org",
			Labels: map[string]string{
				"foo":                            "bar",
				"juju-global-resource-lifecycle": "model",
			},
		},
		Spec: k8sspecs.K8sCustomResourceDefinitionSpec{
			Version: k8sspecs.K8sCustomResourceDefinitionV1Beta1,
			SpecV1Beta1: apiextensionsv1beta1.CustomResourceDefinitionSpec{
				Group:   "kubeflow.org",
				Version: "v1",
				Versions: []apiextensionsv1beta1.CustomResourceDefinitionVersion{
					{Name: "v1", Served: true, Storage: true},
					{Name: "v1beta2", Served: true, Storage: false},
				},
				Scope:                 "Cluster",
				PreserveUnknownFields: pointer.BoolPtr(false),
				Names: apiextensionsv1beta1.CustomResourceDefinitionNames{
					Kind:     "TFJob",
					Plural:   "tfjobs",
					Singular: "tfjob",
				},
				Conversion: &apiextensionsv1beta1.CustomResourceConversion{
					Strategy: apiextensionsv1beta1.NoneConverter,
				},
				AdditionalPrinterColumns: []apiextensionsv1beta1.CustomResourceColumnDefinition{
					{
						Name:        "Worker",
						Type:        "integer",
						Description: "Worker attribute.",
						JSONPath:    ".spec.tfReplicaSpecs.Worker",
					},
				},
				Validation: &apiextensionsv1beta1.CustomResourceValidation{
					OpenAPIV3Schema: &apiextensionsv1beta1.JSONSchemaProps{
						Properties: map[string]apiextensionsv1beta1.JSONSchemaProps{
							"spec": {
								Properties: map[string]apiextensionsv1beta1.JSONSchemaProps{
									"tfReplicaSpecs": {
										Properties: map[string]apiextensionsv1beta1.JSONSchemaProps{
											"PS": {
												Properties: map[string]apiextensionsv1beta1.JSONSchemaProps{
													"replicas": {
														Type: "integer", Minimum: pointer.Float64Ptr(1),
													},
												},
											},
											"Chief": {
												Properties: map[string]apiextensionsv1beta1.JSONSchemaProps{
													"replicas": {
														Type:    "integer",
														Minimum: pointer.Float64Ptr(1),
														Maximum: pointer.Float64Ptr(1),
													},
												},
											},
											"Worker": {
												Properties: map[string]apiextensionsv1beta1.JSONSchemaProps{
													"replicas": {
														Type:    "integer",
														Minimum: pointer.Float64Ptr(1),
													},
												},
											},
										},
									},
								},
							},
						},
					},
				},
			},
		},
	})
}