Skip to content

Field selector is not applied even when resource fields are matching #3573

@hanneshofmann

Description

@hanneshofmann

After upgrading from 4.9.2 to 5.9.0, I have observed that one of our unit tests (which is using KubernetesServer) is failing. It seems that object are not returned when using the Event API with field selectors. I did not yet checked other API's neither whether it's limited to the KubernetesServer.

Following a small reproduction unit test which illustrates the problem:

import io.fabric8.kubernetes.api.model.Event;
import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.server.mock.KubernetesServer;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;

import java.util.List;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

@RunWith(MockitoJUnitRunner.class)
public class KubernetesClientTest {

    @Rule
    public KubernetesServer server = new KubernetesServer(true, true);

    @Test
    public void shouldReturnEventMatchingFieldSelector() {
        // given
        KubernetesClient kubernetesClient = server.getClient();
        Event kubernetesEvent = createKubernetesEventWithReason();
        kubernetesClient.v1().events().create(kubernetesEvent);

        // when
        List<Event> kubernetesEvents = kubernetesClient.v1().events().inAnyNamespace().withField("reason", "Rebooted").list().getItems();

        // then
        assertThat(kubernetesEvents.size()).isEqualTo(1);
    }

    private Event createKubernetesEventWithReason() {
        Event  event = new Event();
        ObjectMeta metaData = new ObjectMeta();
        metaData.setName("EventName");
        event.setMetadata(metaData);
        event.setReason("Rebooted");
        return event;
    }
}

Logs from the test execution:

Nov 08, 2021 9:37:39 AM okhttp3.mockwebserver.MockWebServer$2 execute
INFO: MockWebServer[58829] starting to accept connections
Nov 08, 2021 9:37:40 AM okhttp3.mockwebserver.MockWebServer$3 processOneRequest
INFO: MockWebServer[58829] received request: POST /api/v1/namespaces/test/events HTTP/1.1 and responded: HTTP/1.1 200 OK
Nov 08, 2021 9:37:40 AM okhttp3.mockwebserver.MockWebServer$3 processOneRequest
INFO: MockWebServer[58829] received request: GET /api/v1/events?fieldSelector=reason%3DRebooted HTTP/1.1 and responded: HTTP/1.1 200 OK
Nov 08, 2021 9:37:40 AM okhttp3.mockwebserver.MockWebServer$2 acceptConnections
INFO: MockWebServer[58829] done accepting connections: Socket closed

org.opentest4j.AssertionFailedError: 
Expecting:
 <[]>
to be equal to:
 <1>
but was not.
Expected :1
Actual   :[]

Please let me know if further information are required.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions