From 8e3f375e95fc55c3346171e16089dece23ea8d77 Mon Sep 17 00:00:00 2001 From: buchgr Date: Wed, 16 Mar 2016 14:39:07 +0100 Subject: [PATCH] Add null check for channel and calloptions when creating stub. Fixes #1438 --- .../main/java/io/grpc/stub/AbstractStub.java | 6 +- .../java/io/grpc/stub/AbstractStubTest.java | 74 +++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 stub/src/test/java/io/grpc/stub/AbstractStubTest.java diff --git a/stub/src/main/java/io/grpc/stub/AbstractStub.java b/stub/src/main/java/io/grpc/stub/AbstractStub.java index 3e6f92e217..632a4e3c33 100644 --- a/stub/src/main/java/io/grpc/stub/AbstractStub.java +++ b/stub/src/main/java/io/grpc/stub/AbstractStub.java @@ -31,6 +31,8 @@ package io.grpc.stub; +import static com.google.common.base.Preconditions.checkNotNull; + import io.grpc.CallOptions; import io.grpc.Channel; import io.grpc.ClientInterceptor; @@ -69,8 +71,8 @@ public abstract class AbstractStub> { * @param callOptions the runtime call options to be applied to every call on this stub */ protected AbstractStub(Channel channel, CallOptions callOptions) { - this.channel = channel; - this.callOptions = callOptions; + this.channel = checkNotNull(channel); + this.callOptions = checkNotNull(callOptions); } /** diff --git a/stub/src/test/java/io/grpc/stub/AbstractStubTest.java b/stub/src/test/java/io/grpc/stub/AbstractStubTest.java new file mode 100644 index 0000000000..397175eeb4 --- /dev/null +++ b/stub/src/test/java/io/grpc/stub/AbstractStubTest.java @@ -0,0 +1,74 @@ +/* + * Copyright 2016, Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package io.grpc.stub; + +import io.grpc.CallOptions; +import io.grpc.Channel; +import org.junit.Test; +import org.mockito.Mock; + +public class AbstractStubTest { + + @Mock + Channel channel; + + @Test(expected = NullPointerException.class) + public void channelMustNotBeNull() { + new NoopStub(null); + } + + @Test(expected = NullPointerException.class) + public void callOptionsMustNotBeNull() { + new NoopStub(channel, null); + } + + @Test(expected = NullPointerException.class) + public void callOptionsAndChannelMustNotBeNull() { + new NoopStub(null, null); + } + + class NoopStub extends AbstractStub { + + NoopStub(Channel channel) { + super(channel); + } + + NoopStub(Channel channel, CallOptions options) { + super(channel, options); + } + + @Override + protected NoopStub build(Channel channel, CallOptions callOptions) { + return new NoopStub(channel, callOptions); + } + } +}