Skip to content

Commit

Permalink
formatting fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
ldetmer committed Nov 4, 2024
1 parent 7037602 commit 426963b
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ private static String checkAndAppendProtobufVersionIfNecessary(
// TODO(b/366417603): appending protobuf version to existing client library token until resolved
Pattern pattern = Pattern.compile("(gccl|gapic)\\S*");
Matcher matcher = pattern.matcher(apiClientHeaderValue);
if (matcher.find()) {
if (matcher.find() && GaxProperties.getProtobufVersion() != null) {
return apiClientHeaderValue.substring(0, matcher.end())
+ "--"
+ PROTOBUF_HEADER_VERSION_KEY
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,44 @@
/*
* Copyright 2024 Google LLC
*
* 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 LLC 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 com.google.api.gax.util;

/* Wrapper class for Final Class methods that can not be mocked */
public class ClassLoaderWrapper implements IClassLoaderWrapper {
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
return Class.forName(name);
}
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
return Class.forName(name);
}

@Override
public Object getFieldValue(Class<?> clazz, String fieldName)
throws NoSuchFieldException, IllegalAccessException {
return clazz.getField(fieldName).get(null);
}
@Override
public Object getFieldValue(Class<?> clazz, String fieldName)
throws NoSuchFieldException, IllegalAccessException {
return clazz.getField(fieldName).get(null);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,43 @@
/*
* Copyright 2024 Google LLC
*
* 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 LLC 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 com.google.api.gax.util;

/* Interface that allows for unit testing reflection logic. */
public interface IClassLoaderWrapper {
/* Wraps @java.lang.Class#loadClass method */
Class<?> loadClass(String name) throws ClassNotFoundException;
/* Wraps @java.lang.Class#loadClass method */
Class<?> loadClass(String name) throws ClassNotFoundException;

/*
* Consolidates retrieving a field on a Class object via reflection and retrieving the value of that field
* Expected field is of type int.
*/
Object getFieldValue(Class<?> clazz, String fieldName)
throws NoSuchFieldException, IllegalAccessException;
/*
* Consolidates retrieving a field on a Class object via reflection and retrieving the value of that field
* Expected field is of type int.
*/
Object getFieldValue(Class<?> clazz, String fieldName)
throws NoSuchFieldException, IllegalAccessException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -176,8 +176,7 @@ public void testGetBundleVersion_noManifestFile() throws IOException {

@Test
void testGetProtobufVersion_success() throws Exception {
IClassLoaderWrapper mockClassLoader =
mock(IClassLoaderWrapper.class);
IClassLoaderWrapper mockClassLoader = mock(IClassLoaderWrapper.class);
when(mockClassLoader.loadClass("com.google.protobuf.RuntimeVersion"))
.thenAnswer(invocationOnMock -> Class.class);
when(mockClassLoader.getFieldValue(Class.class, "MAJOR")).thenReturn("2");
Expand All @@ -191,8 +190,7 @@ void testGetProtobufVersion_success() throws Exception {

@Test
void testGetProtobufVersion_classNotFoundException() throws Exception {
IClassLoaderWrapper mockClassLoader =
mock(IClassLoaderWrapper.class);
IClassLoaderWrapper mockClassLoader = mock(IClassLoaderWrapper.class);
when(mockClassLoader.loadClass("com.google.protobuf.RuntimeVersion"))
.thenThrow(new ClassNotFoundException(""));

Expand All @@ -203,8 +201,7 @@ void testGetProtobufVersion_classNotFoundException() throws Exception {

@Test
void testgetProtobufVersion_noSuchFieldException() throws Exception {
IClassLoaderWrapper mockClassLoader =
mock(IClassLoaderWrapper.class);
IClassLoaderWrapper mockClassLoader = mock(IClassLoaderWrapper.class);
when(mockClassLoader.getFieldValue(any(), any())).thenThrow(NoSuchFieldException.class);

String version = GaxProperties.getProtobufVersion(mockClassLoader, Any.class);
Expand All @@ -214,8 +211,7 @@ void testgetProtobufVersion_noSuchFieldException() throws Exception {

@Test
void testGetProtobufVersion_noManifest() throws Exception {
IClassLoaderWrapper mockClassLoader =
mock(IClassLoaderWrapper.class);
IClassLoaderWrapper mockClassLoader = mock(IClassLoaderWrapper.class);
when(mockClassLoader.loadClass("com.google.protobuf.RuntimeVersion"))
.thenThrow(new ClassNotFoundException(""));

Expand Down

0 comments on commit 426963b

Please sign in to comment.