def test_statefulset_with_image_version( self, mock_controller_revisions_for_service_instance, mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS, mock_load_service_namespace_config, mock_pods_for_service_instance, mock_mesh_status, mock_pod, ): mock_job_config = mock.Mock( get_persistent_volumes=mock.Mock(return_value=[mock.Mock]), ) mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS[ "kubernetes" ].loader.return_value = mock_job_config mock_controller_revisions_for_service_instance.return_value = [ Struct( metadata=Struct( name="controller_revision_1", creation_timestamp=datetime.datetime(2021, 4, 1), labels={ "paasta.yelp.com/git_sha": "aaa000", "paasta.yelp.com/config_sha": "config000", "paasta.yelp.com/image_version": "extrastuff", }, ), ), ] mock_pod.metadata.owner_references = [] mock_pods_for_service_instance.return_value = [mock_pod] with asynctest.patch( "paasta_tools.instance.kubernetes.get_pod_status", autospec=True ) as mock_get_pod_status: mock_get_pod_status.return_value = {} status = pik.kubernetes_status_v2( service="service", instance="instance", verbose=0, include_smartstack=False, include_envoy=False, instance_type="kubernetes", settings=mock.Mock(), ) assert len(status["versions"]) == 1 assert status["versions"][0] == { "name": "controller_revision_1", "type": "ControllerRevision", "replicas": 1, "ready_replicas": 1, "create_timestamp": datetime.datetime(2021, 4, 1).timestamp(), "git_sha": "aaa000", "image_version": "extrastuff", "config_sha": "config000", "pods": [mock.ANY], }
def test_event_timeout( self, mock_replicasets_for_service_instance, mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS, mock_load_service_namespace_config, mock_pods_for_service_instance, mock_mesh_status, mock_get_pod_event_messages, mock_pod, ): mock_job_config = mock.Mock( get_persistent_volumes=mock.Mock(return_value=[]), ) mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS[ "kubernetes" ].loader.return_value = mock_job_config mock_replicasets_for_service_instance.return_value = [ Struct( spec=Struct(replicas=1), metadata=Struct( name="replicaset_1", creation_timestamp=datetime.datetime(2021, 3, 5), deletion_timestamp=None, labels={ "paasta.yelp.com/git_sha": "aaa000", "paasta.yelp.com/config_sha": "config000", }, ), ), ] mock_pods_for_service_instance.return_value = [mock_pod] mock_load_service_namespace_config.return_value = {} mock_job_config.get_registrations.return_value = ["service.instance"] mock_get_pod_event_messages.side_effect = asyncio.TimeoutError status = pik.kubernetes_status_v2( service="service", instance="instance", verbose=0, include_smartstack=False, include_envoy=False, instance_type="kubernetes", settings=mock.Mock(), ) # Verify we did not throw an exception assert status assert all( p["events"] == [{"error": "Could not retrieve events. Please try again."}] for p in status["versions"][0]["pods"] )
def test_replicaset( self, mock_replicasets_for_service_instance, mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS, mock_load_service_namespace_config, mock_pods_for_service_instance, mock_mesh_status, mock_pod, ): mock_job_config = mock.Mock( get_persistent_volumes=mock.Mock(return_value=[]), ) mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS[ "kubernetes"].loader.return_value = mock_job_config mock_replicasets_for_service_instance.return_value = [ Struct( spec=Struct(replicas=1), metadata=Struct( name="replicaset_1", creation_timestamp=datetime.datetime(2021, 3, 5), deletion_timestamp=None, labels={ "paasta.yelp.com/git_sha": "aaa000", "paasta.yelp.com/config_sha": "config000", }, ), ), ] mock_pods_for_service_instance.return_value = [mock_pod] mock_load_service_namespace_config.return_value = {} mock_job_config.get_registrations.return_value = ["service.instance"] status = pik.kubernetes_status_v2( service="service", instance="instance", verbose=0, include_smartstack=False, include_envoy=False, instance_type="kubernetes", settings=mock.Mock(), ) assert status == { "app_name": mock_job_config.get_sanitised_deployment_name.return_value, "desired_state": mock_job_config.get_desired_state.return_value, "desired_instances": mock_job_config.get_instances.return_value, "bounce_method": mock_job_config.get_bounce_method.return_value, "versions": [{ "type": "ReplicaSet", "name": "replicaset_1", "replicas": 1, "ready_replicas": 0, "create_timestamp": datetime.datetime(2021, 3, 5).timestamp(), "git_sha": "aaa000", "config_sha": "config000", "pods": [ { "name": "pod_1", "ip": "1.2.3.4", "create_timestamp": datetime.datetime(2021, 3, 6).timestamp(), "delete_timestamp": None, "host": "4.3.2.1", "phase": "Running", "reason": None, "message": None, "scheduled": True, "ready": True, "containers": [ { "healthcheck_grace_period": 1, "name": "main_container", "restart_count": 0, "state": "running", "reason": None, "message": None, "last_state": None, "last_reason": None, "last_message": None, "last_duration": None, "timestamp": datetime.datetime(2021, 3, 6).timestamp(), }, ], }, ], }], }
def test_kubernetes_status_v2( mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS, mock_pods_for_service_instance, mock_replicasets_for_service_instance, ): mock_job_config = mock.Mock() mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS[ "kubernetes"].loader.return_value = mock_job_config mock_replicasets_for_service_instance.return_value = [ Struct( spec=Struct(replicas=1), metadata=Struct( name="replicaset_1", creation_timestamp=datetime.datetime(2021, 3, 5), labels={ "paasta.yelp.com/git_sha": "aaa000", "paasta.yelp.com/config_sha": "config000", }, ), ), ] mock_pods_for_service_instance.return_value = [ Struct( metadata=Struct( owner_references=[ Struct(kind="ReplicaSet", name="replicaset_1") ], name="pod_1", creation_timestamp=datetime.datetime(2021, 3, 6), ), status=Struct(pod_ip="1.2.3.4"), ), ] status = pik.kubernetes_status_v2( service="service", instance="instance", verbose=0, include_smartstack=False, include_envoy=False, instance_type="kubernetes", settings=mock.Mock(), ) assert status == { "app_name": mock_job_config.get_sanitised_deployment_name.return_value, "desired_state": mock_job_config.get_desired_state.return_value, "desired_instances": mock_job_config.get_instances.return_value, "bounce_method": mock_job_config.get_bounce_method.return_value, "replicasets": [{ "name": "replicaset_1", "replicas": 1, "ready_replicas": 0, "create_timestamp": datetime.datetime(2021, 3, 5).timestamp(), "git_sha": "aaa000", "config_sha": "config000", "pods": [{ "name": "pod_1", "ip": "1.2.3.4", "create_timestamp": datetime.datetime(2021, 3, 6).timestamp(), }], }], }
def test_kubernetes_status_v2( mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS, mock_load_service_namespace_config, mock_pods_for_service_instance, mock_replicasets_for_service_instance, mock_mesh_status, ): mock_job_config = mock.Mock() mock_LONG_RUNNING_INSTANCE_TYPE_HANDLERS[ "kubernetes"].loader.return_value = mock_job_config mock_replicasets_for_service_instance.return_value = [ Struct( spec=Struct(replicas=1), metadata=Struct( name="replicaset_1", creation_timestamp=datetime.datetime(2021, 3, 5), deletion_timestamp=None, labels={ "paasta.yelp.com/git_sha": "aaa000", "paasta.yelp.com/config_sha": "config000", }, ), ), ] mock_pods_for_service_instance.return_value = [ Struct( metadata=Struct( owner_references=[ Struct(kind="ReplicaSet", name="replicaset_1") ], name="pod_1", creation_timestamp=datetime.datetime(2021, 3, 6), deletion_timestamp=None, ), status=Struct( pod_ip="1.2.3.4", host_ip="4.3.2.1", phase="Running", reason=None, message=None, conditions=[ Struct( type="Ready", status="True", ), Struct( type="PodScheduled", status="True", ), ], container_statuses=[ Struct( name="main_container", restart_count=0, state=Struct( running=Struct( started_at=datetime.datetime(2021, 3, 6)), waiting=None, terminated=None, ), last_state=Struct( running=None, waiting=None, terminated=None, ), ), ], ), spec=Struct(containers=[ Struct( name="main_container", liveness_probe=Struct( initial_delay_seconds=1, failure_threshold=2, period_seconds=3, timeout_seconds=4, ), ) ]), ), ] mock_load_service_namespace_config.return_value = {} mock_job_config.get_registrations.return_value = ["service.instance"] status = pik.kubernetes_status_v2( service="service", instance="instance", verbose=0, include_smartstack=False, include_envoy=False, instance_type="kubernetes", settings=mock.Mock(), ) assert status == { "app_name": mock_job_config.get_sanitised_deployment_name.return_value, "desired_state": mock_job_config.get_desired_state.return_value, "desired_instances": mock_job_config.get_instances.return_value, "bounce_method": mock_job_config.get_bounce_method.return_value, "replicasets": [{ "name": "replicaset_1", "replicas": 1, "ready_replicas": 0, "create_timestamp": datetime.datetime(2021, 3, 5).timestamp(), "git_sha": "aaa000", "config_sha": "config000", "pods": [{ "name": "pod_1", "ip": "1.2.3.4", "create_timestamp": datetime.datetime(2021, 3, 6).timestamp(), "delete_timestamp": None, "host": "4.3.2.1", "phase": "Running", "reason": None, "message": None, "scheduled": True, "ready": True, "containers": [{ "healthcheck_grace_period": 1, "name": "main_container", "restart_count": 0, "state": "running", "reason": None, "message": None, "last_state": None, "last_reason": None, "last_message": None, "last_duration": None, "timestamp": datetime.datetime(2021, 3, 6).timestamp(), }], }], }], }