Package org.jboss.aerogear.simplepush.server.datastore

Source Code of org.jboss.aerogear.simplepush.server.datastore.RedisDataStoreTest

/**
* JBoss, Home of Professional Open Source Copyright Red Hat, Inc., and individual contributors
*
* 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 org.jboss.aerogear.simplepush.server.datastore;

import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.hasItem;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

import org.jboss.aerogear.simplepush.protocol.Ack;
import org.jboss.aerogear.simplepush.protocol.impl.AckImpl;
import org.jboss.aerogear.simplepush.server.Channel;
import org.jboss.aerogear.simplepush.server.DefaultChannel;
import org.jboss.aerogear.simplepush.util.CryptoUtil;
import org.jboss.aerogear.simplepush.util.UUIDUtil;
import org.junit.Test;

/**
* This test requires a local Redis installation running on localhost:6379
*
*/
public class RedisDataStoreTest {
    private static final String HOST = "localhost";
    private static final int PORT = 6379;

    @Test
    public void savePrivateSalt() {
        final byte[] salt = "some private salt".getBytes();
        final RedisDataStore store = newRedisDataStore();
        store.savePrivateKeySalt(salt);
        assertThat(store.getPrivateKeySalt(), equalTo(salt));
    }

    @Test
    public void saveChannel() {
        final Channel channel = newChannel2();
        assertThat(newRedisDataStore().saveChannel(channel), is(true));
    }

    @Test
    public void saveChannelDuplicate() {
        final Channel channel = newChannel2();
        assertThat(newRedisDataStore().saveChannel(channel), is(true));
        assertThat(newRedisDataStore().saveChannel(channel), is(false));
    }

    @Test
    public void getChannel() throws ChannelNotFoundException {
        final RedisDataStore store = newRedisDataStore();
        final Channel channel = newChannel2();
        store.saveChannel(channel);
        final Channel retreived = store.getChannel(channel.getChannelId());
        assertThat(retreived.getChannelId(), equalTo(channel.getChannelId()));
        assertThat(retreived.getEndpointToken(), equalTo(channel.getEndpointToken()));
    }

    @Test (expected = ChannelNotFoundException.class)
    public void getChannelNonExisting() throws ChannelNotFoundException {
        newRedisDataStore().getChannel(UUID.randomUUID().toString());
    }

    @Test
    public void getChannelIds() throws ChannelNotFoundException {
        final RedisDataStore store = newRedisDataStore();
        final String uaid = UUIDUtil.newUAID();
        store.saveChannel(newChannel2(uaid));
        store.saveChannel(newChannel2(uaid));
        final Set<String> channelIds = store.getChannelIds(uaid);
        assertThat(channelIds.size(), is(2));
    }

    @Test
    public void removeChannelIds() throws ChannelNotFoundException {
        final RedisDataStore store = newRedisDataStore();
        final String uaid = UUIDUtil.newUAID();
        store.saveChannel(newChannel2(uaid));
        store.saveChannel(newChannel2(uaid));
        store.removeChannels(uaid);
        assertThat(store.getChannelIds(uaid).size(), is(0));
    }

    @Test
    public void removeChannels() throws ChannelNotFoundException {
        final RedisDataStore store = newRedisDataStore();
        final String uaid = UUIDUtil.newUAID();
        final Channel ch1 = newChannel2(uaid);
        final Channel ch2 = newChannel2(uaid);
        store.saveChannel(ch1);
        store.saveChannel(ch2);
        store.removeChannels(new HashSet<String>(Arrays.asList(ch1.getChannelId(), ch2.getChannelId())));
        assertThat(store.getChannelIds(uaid).size(), is(0));
    }

    @Test
    public void updateVersion() throws VersionException, ChannelNotFoundException {
        final RedisDataStore store = newRedisDataStore();
        final Channel channel = newChannel2();
        store.saveChannel(channel);
        final String channelId = store.updateVersion(channel.getEndpointToken(), 2L);
        assertThat(channelId, equalTo(channel.getChannelId()));
    }

    @Test (expected = VersionException.class)
    public void updateVersionEqualToCurrentVersion() throws VersionException, ChannelNotFoundException {
        final RedisDataStore store = newRedisDataStore();
        final Channel channel = newChannel2();
        store.saveChannel(channel);
        store.updateVersion(channel.getEndpointToken(), 2L);
        store.updateVersion(channel.getEndpointToken(), 2L);
    }

    @Test (expected = VersionException.class)
    public void updateVersionLessThanCurrentVersion() throws VersionException, ChannelNotFoundException {
        final RedisDataStore store = newRedisDataStore();
        final Channel channel = newChannel2();
        store.saveChannel(channel);
        store.updateVersion(channel.getEndpointToken(), 2L);
        store.updateVersion(channel.getEndpointToken(), 1L);
    }

    @Test
    public void saveUnacknowledged() {
        final RedisDataStore store = newRedisDataStore();
        final Channel channel = newChannel2();
        store.saveChannel(channel);
        store.saveUnacknowledged(channel.getChannelId(), channel.getVersion());
        final Set<Ack> unacknowledged = store.getUnacknowledged(channel.getUAID());
        assertThat(unacknowledged.size(), is(1));
    }

    @Test
    public void removeAcknowledged() {
        final RedisDataStore store = newRedisDataStore();
        final String uaid = UUIDUtil.newUAID();
        final Channel channel1 = newChannel2(uaid);
        final Channel channel2 = newChannel2(uaid);
        store.saveChannel(channel1);
        store.saveChannel(channel2);

        store.saveUnacknowledged(channel1.getChannelId(), channel1.getVersion());
        store.saveUnacknowledged(channel2.getChannelId(), channel2.getVersion());

        final Set<Ack> acks = asSet(new AckImpl(channel1.getChannelId(), channel1.getVersion()));
        final Set<Ack> unacknowledged = store.removeAcknowledged(channel1.getUAID(), acks);
        assertThat(unacknowledged.size(), is(1));
        assertThat(unacknowledged, hasItem(new AckImpl(channel2.getChannelId(), channel2.getVersion())));
    }

    private Set<Ack> asSet(final Ack... ack) {
        return new HashSet<Ack>(Arrays.asList(ack));
    }

    private RedisDataStore newRedisDataStore() {
        return new RedisDataStore(HOST, PORT);
    }

    private Channel newChannel2() {
        return newChannel2(UUIDUtil.newUAID());
    }

    private Channel newChannel2(final String uaid) {
        final String channelId = UUID.randomUUID().toString();
        final byte[] salt = "some salt for the server private".getBytes();
        final String endpointToken = CryptoUtil.endpointToken(uaid, channelId, CryptoUtil.secretKey("testKey", salt));
        return new DefaultChannel(uaid, channelId, endpointToken);
    }

}
TOP

Related Classes of org.jboss.aerogear.simplepush.server.datastore.RedisDataStoreTest

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.