Package com.facebook.swift.service.async

Source Code of com.facebook.swift.service.async.AsyncHttpClientTest

/*
* Copyright (C) 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.swift.service.async;

import com.facebook.swift.codec.ThriftCodecManager;
import com.facebook.swift.service.LogEntry;
import com.facebook.swift.service.ResultCode;
import com.facebook.swift.service.Scribe;
import com.facebook.swift.service.ThriftClientManager;
import com.google.common.collect.Lists;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import org.apache.thrift.TException;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.util.concurrent.CountDownLatch;

import static org.testng.Assert.assertEquals;

public class AsyncHttpClientTest extends AsyncTestBase
{
    // Test a simple sync client call through HTTP (in this case, to a TServlet running under Jetty)
    @Test
    public void testHttpClient()
            throws Exception
    {
        try (HttpScribeServer server = new HttpScribeServer())
        {
            server.start();

            // Server was just started, it shouldn't have recorded any messages yet
            assertEquals(server.getLogEntries().size(), 0);

            int serverPort = server.getLocalPort();

            try (Scribe client = createHttpClient(Scribe.class, serverPort).get()) {
                client.log(Lists.newArrayList(new LogEntry("testCategory", "testMessage")));
            }

            // Blocking call completed, check that it was successful in logging a message.
            assertEquals(server.getLogEntries().size(), 1);
        }
    }

    // Test a simple async client call to the same servlet
    @Test
    public void testHttpAsyncClient()
            throws Exception
    {
        try (final HttpScribeServer server = new HttpScribeServer())
        {
            server.start();
            final CountDownLatch latch = new CountDownLatch(1);

            // Server was just started, it shouldn't have recorded any messages yet
            assertEquals(server.getLogEntries().size(), 0);

            int serverPort = server.getLocalPort();

            ListenableFuture<AsyncScribe> clientFuture = createHttpClient(AsyncScribe.class, serverPort);
            Futures.addCallback(clientFuture, new FutureCallback<AsyncScribe>()
            {
                @Override
                public void onSuccess(AsyncScribe client)
                {
                    try {
                        ListenableFuture<ResultCode> methodFuture = client.log(Lists.newArrayList(new LogEntry("testCategory", "testMessage")));

                        // Connected a client, and made an async call against it, but the call shouldn't
                        // be completed right away. Check that it isn't.
                        assertEquals(server.getLogEntries().size(), 0);

                        Futures.addCallback(methodFuture, new FutureCallback<ResultCode>()
                        {
                            @Override
                            public void onSuccess(ResultCode result)
                            {
                                latch.countDown();
                            }

                            @Override
                            public void onFailure(Throwable t)
                            {
                                latch.countDown();
                            }
                        });
                    }
                    catch (Throwable th) {
                        onFailure(th);
                    }
                }

                @Override
                public void onFailure(Throwable t)
                {
                    latch.countDown();
                }
            });

            latch.await();

            // Now that the latch is clear, client should have connected and the async call completed
            // so check that it did so successfully.
            assertEquals(server.getLogEntries().size(), 1);
        }
    }

    @BeforeMethod(alwaysRun = true)
    public void setup()
            throws IllegalAccessException, InstantiationException, TException
    {
        codecManager = new ThriftCodecManager();
        clientManager = new ThriftClientManager(codecManager);
    }

    @AfterMethod(alwaysRun = true)
    public void tearDown()
    {
        clientManager.close();
    }
}
TOP

Related Classes of com.facebook.swift.service.async.AsyncHttpClientTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.