Skip to content

Commit

Permalink
Add SubscriptionId class and tests. Use SubscriptionId in listSubscri…
Browse files Browse the repository at this point in the history
…ptions(topic)
  • Loading branch information
mziccard committed May 5, 2016
1 parent f73e657 commit 54596c0
Show file tree
Hide file tree
Showing 5 changed files with 145 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,9 @@ public static PullOption maxConcurrentCallbacks(int maxConcurrency) {

Future<AsyncPage<Subscription>> listSubscriptionsAsync(ListOption... options);

Page<Subscription> listSubscriptions(String topic, ListOption... options);
Page<SubscriptionId> listSubscriptions(String topic, ListOption... options);

Future<AsyncPage<Subscription>> listSubscriptionsAsync(String topic, ListOption... options);
Future<AsyncPage<SubscriptionId>> listSubscriptionsAsync(String topic, ListOption... options);

Iterator<ReceivedMessage> pull(String subscription, PullOption... options);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,12 +185,12 @@ public Future<AsyncPage<Subscription>> listSubscriptionsAsync(ListOption... opti
}

@Override
public Page<Subscription> listSubscriptions(String topic, ListOption... options) {
public Page<SubscriptionId> listSubscriptions(String topic, ListOption... options) {
return null;
}

@Override
public Future<AsyncPage<Subscription>> listSubscriptionsAsync(String topic,
public Future<AsyncPage<SubscriptionId>> listSubscriptionsAsync(String topic,
ListOption... options) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* Copyright 2016 Google Inc. All Rights Reserved.
*
* 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.google.cloud.pubsub;

import static com.google.cloud.pubsub.spi.v1.SubscriberApi.parseProjectFromSubscriptionName;
import static com.google.cloud.pubsub.spi.v1.SubscriberApi.parseSubscriptionFromSubscriptionName;
import static com.google.common.base.Preconditions.checkNotNull;

import com.google.common.base.MoreObjects;

import java.io.Serializable;
import java.util.Objects;

/**
* Identity for a Google PubSub subscription. {@code SubscriptionId} objects are returned by the
* {@link PubSub#listSubscriptions(String, PubSub.ListOption...)} and
* {@link PubSub#listSubscriptionsAsync(String, PubSub.ListOption...)} methods as the same topic
* can be used by subscriptions in different projects.
*/
public class SubscriptionId implements Serializable {

private static final long serialVersionUID = 6507142968866856283L;

private final String project;
private final String subscription;

SubscriptionId(String project, String subscription) {
this.project = checkNotNull(project);
this.subscription = checkNotNull(subscription);
}

/**
* Returns the name of the project where the subscription resides.
*/
public String project() {
return project;
}

/**
* Returns the name of the subscription.
*/
public String subscription() {
return subscription;
}

@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("project", project)
.add("subscription", subscription).toString();
}

@Override
public final int hashCode() {
return Objects.hash(project, subscription);
}

@Override
public final boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof SubscriptionId)) {
return false;
}
SubscriptionId other = (SubscriptionId) obj;
return Objects.equals(project, other.project)
&& Objects.equals(subscription, other.subscription);
}

static SubscriptionId fromPb(String pb) {
return new SubscriptionId(parseProjectFromSubscriptionName(pb),
parseSubscriptionFromSubscriptionName(pb));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -133,11 +133,11 @@ public Future<List<String>> publishAsync(Iterable<Message> messages) {
return pubsub.publishAsync(name(), messages);
}

public Page<Subscription> listSubscriptions(ListOption... options) {
public Page<SubscriptionId> listSubscriptions(ListOption... options) {
return pubsub.listSubscriptions(name(), options);
}

public Future<AsyncPage<Subscription>> listSubscriptionsAsync(ListOption... options) {
public Future<AsyncPage<SubscriptionId>> listSubscriptionsAsync(ListOption... options) {
return pubsub.listSubscriptionsAsync(name(), options);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* Copyright 2016 Google Inc. All Rights Reserved.
*
* 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.google.cloud.pubsub;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class SubscriptionIdTest {

private static final String PROJECT = "project";
private static final String NAME = "subscription";
private static final String TOPIC_PB = "projects/project/subscriptions/subscription";
private static final SubscriptionId SUBSCRIPTION_ID = new SubscriptionId(PROJECT, NAME);

@Test
public void testConstructor() {
assertEquals(PROJECT, SUBSCRIPTION_ID.project());
assertEquals(NAME, SUBSCRIPTION_ID.subscription());
}

@Test
public void testToAndFromPb() {
SubscriptionId subscriptionId = SubscriptionId.fromPb(TOPIC_PB);
compareSubscriptionId(SUBSCRIPTION_ID, subscriptionId);
assertEquals(PROJECT, subscriptionId.project());
assertEquals(NAME, subscriptionId.subscription());
}

private void compareSubscriptionId(SubscriptionId expected, SubscriptionId value) {
assertEquals(expected, value);
assertEquals(expected.project(), expected.project());
assertEquals(expected.subscription(), expected.subscription());
assertEquals(expected.hashCode(), expected.hashCode());
}
}

0 comments on commit 54596c0

Please sign in to comment.