/*******************************************************************************
* Copyright (c) 2015 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package com.openshift.restclient;
import static com.openshift.internal.restclient.IntegrationTestHelper.cleanUpResource;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.openshift.internal.restclient.IntegrationTestHelper;
import com.openshift.restclient.IOpenShiftWatchListener.ChangeType;
import com.openshift.restclient.model.IResource;
import com.openshift.restclient.model.IService;
public class WatchClientIntegrationTest {
private static final Logger LOG = LoggerFactory.getLogger(WatchClientIntegrationTest.class);
private IntegrationTestHelper helper = new IntegrationTestHelper();
private IClient client;
private IResource project;
public static final String [] KINDS = new String[] {
ResourceKind.BUILD_CONFIG,
ResourceKind.DEPLOYMENT_CONFIG,
ResourceKind.SERVICE,
ResourceKind.POD,
ResourceKind.REPLICATION_CONTROLLER,
ResourceKind.BUILD,
ResourceKind.IMAGE_STREAM,
ResourceKind.ROUTE
};
private ExecutorService service;
private boolean isError;
@Before
public void setup() {
service = Executors.newSingleThreadScheduledExecutor();
client = helper.createClientForBasicAuth();
IResource projRequest = client.getResourceFactory().stub(ResourceKind.PROJECT_REQUEST, helper.generateNamespace());
project = client.create(projRequest);
}
@After
public void teardown() {
cleanUpResource(client, project);
service.shutdownNow();
}
@SuppressWarnings("rawtypes")
@Test(timeout=60000)
public void test() throws Exception{
List results = new ArrayList();
CountDownLatch latch = new CountDownLatch(KINDS.length);
IOpenShiftWatchListener listener = new IOpenShiftWatchListener() {
@SuppressWarnings("unchecked")
@Override
public void received(IResource resource, ChangeType change) {
results.add(change);
}
@Override
public void connected(List<IResource> resources) {
latch.countDown();
}
@Override
public void disconnected() {
latch.countDown();
}
@Override
public void error(Throwable err) {
latch.countDown();
isError = true;
LOG.error("",err);
}
};
IWatcher watcher = null;
try {
watcher = client.watch(project.getName(), listener, KINDS);
latch.await();
assertFalse("Expected connection without error",isError);
IService service = client.getResourceFactory().stub(ResourceKind.SERVICE,"hello-world", project.getName());
service.addPort(8080,8080);
service = client.create(service);
service.addLabel("foo", "bar");
service = client.update(service);
client.delete(service);
assertArrayEquals(new ChangeType[] {ChangeType.ADDED, ChangeType.MODIFIED, ChangeType.DELETED}, results.toArray());
assertEquals(0, latch.getCount());
}finally {
if(watcher != null) {
watcher.stop();
}
}
}
}