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: pod_test.go
    path of file: ./repos/lastbackend/pkg/controller/state/service
    
    the code of the file until where you have to start completion: //
// Last.Backend LLC CONFIDENTIAL
// __________________
//
// [2014] - [2019] Last.Backend LLC
// All Rights Reserved.
//
// NOTICE:  All information contained herein is, and remains
// the property of Last.Backend LLC and its suppliers,
// if any.  The intelle
    
func TestHandlePodStateError(t *testing.T) {

	type suit struct {
		name string
		args struct {
			state *ServiceState
			pod   *types.Pod
		}
		want struct {
			err   string
			state *ServiceState
		}
	}

	var tests []suit

	tests = append(tests, func() suit {

		s := suit{name: "successful state handle, change deployment state to error"}

		svc := getServiceAsset(types.StateProvision, types.EmptyString)
		dp := getDeploymentAsset(svc, types.StateProvision, types.EmptyString)
		pod := getPodAsset(dp, types.StateError, types.EmptyString)

		s.args.pod = pod

		s.args.state = getServiceStateAsset(svc)
		s.args.state.deployment.provision = dp
		s.args.state.deployment.list[dp.SelfLink().String()] = dp
		s.args.state.pod.list[dp.SelfLink().String()] = make(map[string]*types.Pod)
		s.args.state.pod.list[dp.SelfLink().String()][pod.SelfLink().String()] = pod

		s.want.err = types.EmptyString
		s.want.state = getServiceStateCopy(s.args.state)
		s.want.state.deployment.provision.Status.State = types.StateError

		return s
	}())

	tests = append(tests, func() suit {

		s := suit{name: "successful state handle, change deployment state to degradation"}

		svc := getServiceAsset(types.StateProvision, types.EmptyString)
		dp := getDeploymentAsset(svc, types.StateProvision, types.EmptyString)
		p1 := getPodAsset(dp, types.StateError, types.EmptyString)
		p2 := getPodAsset(dp, types.StateReady, types.EmptyString)

		s.args.pod = p1

		s.args.state = getServiceStateAsset(svc)
		s.args.state.deployment.provision = dp
		s.args.state.deployment.list[dp.SelfLink().String()] = dp
		s.args.state.pod.list[dp.SelfLink().String()] = make(map[string]*types.Pod)
		s.args.state.pod.list[dp.SelfLink().String()][p1.SelfLink().String()] = p1
		s.args.state.pod.list[dp.SelfLink().String()][p2.SelfLink().String()] = p2

		s.want.err = types.EmptyString
		s.want.state = getServiceStateCopy(s.args.state)
		s.want.state.deployment.provision.Status.State = types.StateDegradation

		return s
	}())

	tests = append(tests, func() suit {

		s := suit{name: "successful state handle, change deployment state to error with many pods"}

		svc := getServiceAsset(types.StateProvision, types.EmptyString)
		dp := getDeploymentAsset(svc, types.StateProvision, types.EmptyString)
		p1 := getPodAsset(dp, types.StateError, types.EmptyString)
		p2 := getPodAsset(dp, types.StateError, types.EmptyString)

		s.args.pod = p1

		s.args.state = getServiceStateAsset(svc)
		s.args.state.deployment.provision = dp
		s.args.state.deployment.list[dp.SelfLink().String()] = dp
		s.args.state.pod.list[dp.SelfLink().String()] = make(map[string]*types.Pod)
		s.args.state.pod.list[dp.SelfLink().String()][p1.SelfLink().String()] = p1
		s.args.state.pod.list[dp.SelfLink().String()][p2.SelfLink().String()] = p2

		s.want.err = types.EmptyString
		s.want.state = getServiceStateCopy(s.args.state)
		s.want.state.deployment.provision.Status.State = types.StateError

		return s
	}())

	for _, tt := range tests {
		testPodObserver(t, tt.name, tt.want.err, tt.want.state, tt.args.state, tt.args.pod)
	}
}