List<GcpAddress> getAddresses() {
        try {
            return RetryUtils.retry(this::fetchGcpAddresses, RETRIES, NON_RETRYABLE_KEYWORDS);
        } catch (RestClientException e) {
            handleKnownException(e);
            return emptyList();
        }
    }
@Test
    public void getAddressesMultipleProjectsMultipleZones() {
        // given
        Label label = new Label("application=hazelcast");
        given(gcpComputeApi.instances(PROJECT_1, ZONE_1, label, ACCESS_TOKEN)).willReturn(singletonList(ADDRESS_1));
        given(gcpComputeApi.instances(PROJECT_1, ZONE_2, label, ACCESS_TOKEN)).willReturn(singletonList(ADDRESS_2));
        given(gcpComputeApi.instances(PROJECT_2, ZONE_1, label, ACCESS_TOKEN)).willReturn(singletonList(ADDRESS_3));
        given(gcpComputeApi.instances(PROJECT_2, ZONE_2, label, ACCESS_TOKEN)).willReturn(singletonList(ADDRESS_4));

        GcpConfig gcpConfig = GcpConfig.builder()
                .setProjects(asList(PROJECT_1, PROJECT_2))
                .setZones(asList(ZONE_1, ZONE_2))
                .setLabel(label)
                .build();
        GcpClient gcpClient = new GcpClient(gcpMetadataApi, gcpComputeApi, gcpAuthenticator, gcpConfig);

        // when
        List<GcpAddress> result = gcpClient.getAddresses();

        // then
        assertEquals(ADDRESSES, result);
    }