Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: googleapis/java-storage
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.103.1
Choose a base ref
...
head repository: googleapis/java-storage
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.104.0
Choose a head ref

Commits on Jan 28, 2020

  1. Update HTTP client (#95)

    * update guava and GAX
    
    * update http-client
    
    * don't import non-BOM
    
    * add test dependency
    elharo authored and frankyn committed Jan 28, 2020
    Copy the full SHA
    227735c View commit details
  2. Remove duplicate dependency (#94)

    elharo authored and frankyn committed Jan 28, 2020
    Copy the full SHA
    32a04ed View commit details
  3. update google-cloud-kms-v1 (#91)

    @frankyn need to do these two together
    elharo authored and frankyn committed Jan 28, 2020
    Copy the full SHA
    fde1984 View commit details
  4. chore: release 1.103.2-SNAPSHOT (#97)

    * updated versions.txt [ci skip]
    
    * updated google-cloud-storage/pom.xml [ci skip]
    
    * updated pom.xml [ci skip]
    release-please[bot] authored and JesseLovelace committed Jan 28, 2020
    Copy the full SHA
    195096c View commit details

Commits on Jan 30, 2020

  1. chore: remove deprecated method (#32)

    * chore: remove deprecated method
    
    * chore: modified code
    Praful Makani authored Jan 30, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    53abe4a View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    64f34bd View commit details

Commits on Jan 31, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    b815a89 View commit details

Commits on Feb 3, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    aa1d95e View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    044de39 View commit details

Commits on Feb 5, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    47b1495 View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    c86276b View commit details

Commits on Feb 11, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    836977e View commit details

Commits on Feb 12, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    6c81531 View commit details
  2. Update GAX (#124)

    elharo authored Feb 12, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    bb7a62c View commit details

Commits on Feb 14, 2020

  1. feat: add delimiter BlobListOption (#102)

    * feat: add delimiter BlobListOption
    
    * feat: added testcase for delemiter method
    
    * feat: fix review changes
    
    * build: fix build
    athakor authored Feb 14, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    b30a675 View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    3809576 View commit details
  3. feat: disableGzipContent option on create with InputStream (#36) (#82)

    Previously, only the methods to create blobs that take a byte[] argument offer the option to disable gzip compression; the methods that accept an InputStream argument do not. This is due to the BlobWriteOption enum missing a matching constant for BlobTargetOption.IF_DISABLE_GZIP_CONTENT.
    
    This change set adds a matching IF_DISABLE_GZIP_CONTENT constant to BlobWriteOption including the correct translation to StorageRpc.Option. The net result is that the Storage create functions that accept an InputStream now offer the option to disable gzip compression.
    nblair authored Feb 14, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    65d3739 View commit details
  4. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    2c8b9ec View commit details

Commits on Feb 15, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    753d870 View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    5da3e8d View commit details

Commits on Feb 19, 2020

  1. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    1af989e View commit details
  2. Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    fce5b33 View commit details

Commits on Feb 20, 2020

  1. chore: release 1.104.0 (#132)

    * updated CHANGELOG.md [ci skip]
    
    * updated README.md [ci skip]
    
    * updated versions.txt [ci skip]
    
    * updated google-cloud-storage/pom.xml [ci skip]
    
    * updated pom.xml [ci skip]
    release-please[bot] authored Feb 20, 2020

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
    Copy the full SHA
    fe71665 View commit details
2 changes: 2 additions & 0 deletions .github/trusted-contribution.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
trustedContributors:
- renovate-bot
7 changes: 6 additions & 1 deletion .kokoro/linkage-monitor.sh
Original file line number Diff line number Diff line change
@@ -23,7 +23,12 @@ cd github/java-storage/
java -version
echo ${JOB_TYPE}

mvn install -DskipTests=true -Dmaven.javadoc.skip=true -Dgcloud.download.skip=true -B -V
mvn install -B -V \
-DskipTests=true \
-Dclirr.skip=true \
-Denforcer.skip=true \
-Dmaven.javadoc.skip=true \
-Dgcloud.download.skip=true

# Kokoro job cloud-opensource-java/ubuntu/linkage-monitor-gcs creates this JAR
JAR=linkage-monitor-latest-all-deps.jar
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# Changelog

## [1.104.0](https://www.github.com/googleapis/java-storage/compare/v1.103.1...v1.104.0) (2020-02-19)


### Features

* add delimiter BlobListOption ([#102](https://www.github.com/googleapis/java-storage/issues/102)) ([b30a675](https://www.github.com/googleapis/java-storage/commit/b30a6757de84e2ceebc9f28817bcfa5c34c20a30))
* disableGzipContent option on create with InputStream ([#36](https://www.github.com/googleapis/java-storage/issues/36)) ([#82](https://www.github.com/googleapis/java-storage/issues/82)) ([65d3739](https://www.github.com/googleapis/java-storage/commit/65d3739567427e49ca4abfd39702fd4022ee8e3c))


### Bug Fixes

* mismatch chunksize ([#135](https://www.github.com/googleapis/java-storage/issues/135)) ([5da3e8d](https://www.github.com/googleapis/java-storage/commit/5da3e8d3736eed0151e0f564a6d164fb5b429450))


### Dependencies

* update dependency com.google.api-client:google-api-client to v1.30.8 ([#111](https://www.github.com/googleapis/java-storage/issues/111)) ([47b1495](https://www.github.com/googleapis/java-storage/commit/47b149509478d211ff103419e695476f42b814f0))
* update dependency com.google.api.grpc:grpc-google-cloud-kms-v1 to v0.83.1 ([#118](https://www.github.com/googleapis/java-storage/issues/118)) ([753d870](https://www.github.com/googleapis/java-storage/commit/753d8700175bdbb2d4c4a51d42399cb400017520))
* update dependency com.google.api.grpc:proto-google-cloud-kms-v1 to v0.83.1 ([#119](https://www.github.com/googleapis/java-storage/issues/119)) ([2c8b9ec](https://www.github.com/googleapis/java-storage/commit/2c8b9ecd527f80397d5921c77aa72bf91fe0bd3c))
* update dependency com.google.http-client:google-http-client-bom to v1.34.2 ([#131](https://www.github.com/googleapis/java-storage/issues/131)) ([fce5b33](https://www.github.com/googleapis/java-storage/commit/fce5b3335bd1d480eb82dcbccf71afc779a1fb25))
* update dependency com.google.protobuf:protobuf-bom to v3.11.3 ([#113](https://www.github.com/googleapis/java-storage/issues/113)) ([044de39](https://www.github.com/googleapis/java-storage/commit/044de393b6523c68eb63c8d1e160288e0c4dc2a0))
* update dependency com.google.protobuf:protobuf-bom to v3.11.4 ([#134](https://www.github.com/googleapis/java-storage/issues/134)) ([1af989e](https://www.github.com/googleapis/java-storage/commit/1af989e1d5745268bfca3d9ffd1ad8e331d94589))
* update dependency io.opencensus:opencensus-api to v0.25.0 ([#129](https://www.github.com/googleapis/java-storage/issues/129)) ([3809576](https://www.github.com/googleapis/java-storage/commit/3809576429a27c13e0c65d986e5306f8aa50bb1a))
* update to gRPC 1.27.0 ([#105](https://www.github.com/googleapis/java-storage/issues/105)) ([64f34bd](https://www.github.com/googleapis/java-storage/commit/64f34bd7a5735aaddecc6a1f76db4f35a320e305))

### [1.103.1](https://www.github.com/googleapis/java-storage/compare/v1.103.0...v1.103.1) (2020-01-27)


6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -37,16 +37,16 @@ If you are using Maven without Bom, Add this to your dependencies.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.103.1</version>
<version>1.104.0</version>
</dependency>
```
If you are using Gradle, add this to your dependencies
```Groovy
compile 'com.google.cloud:google-cloud-storage:1.103.1'
compile 'com.google.cloud:google-cloud-storage:1.104.0'
```
If you are using SBT, add this to your dependencies
```Scala
libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "1.103.1"
libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "1.104.0"
```
[//]: # ({x-version-update-end})

28 changes: 15 additions & 13 deletions google-cloud-storage/pom.xml
Original file line number Diff line number Diff line change
@@ -2,17 +2,17 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>google-cloud-storage</artifactId>
<version>1.103.1</version><!-- {x-version-update:google-cloud-storage:current} -->
<version>1.104.0</version><!-- {x-version-update:google-cloud-storage:current} -->
<packaging>jar</packaging>
<name>Google Cloud Storage</name>
<url>https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-storage</url>
<url>https://github.com/googleapis/java-storage</url>
<description>
Java idiomatic client for Google Cloud Storage.
</description>
<parent>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage-parent</artifactId>
<version>1.103.1</version><!-- {x-version-update:google-cloud-storage:current} -->
<version>1.104.0</version><!-- {x-version-update:google-cloud-storage:current} -->
</parent>
<properties>
<site.installationModule>google-cloud-storage</site.installationModule>
@@ -23,9 +23,18 @@
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-jackson2</artifactId>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.30.8</version>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
@@ -43,14 +52,6 @@
<groupId>com.google.api</groupId>
<artifactId>gax</artifactId>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-jackson2</artifactId>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-credentials</artifactId>
@@ -125,13 +126,13 @@
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>grpc-google-cloud-kms-v1</artifactId>
<version>0.82.1</version>
<version>0.83.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-cloud-kms-v1</artifactId>
<version>0.82.1</version>
<version>0.83.1</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -168,6 +169,7 @@
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.11</version>
<scope>test</scope>
</dependency>
</dependencies>
Original file line number Diff line number Diff line change
@@ -169,7 +169,9 @@ private String constructV4CanonicalRequestHash() {
canonicalRequest
.append(serializer.serializeHeaderNames(canonicalizedExtensionHeaders))
.append(COMPONENT_SEPARATOR);
canonicalRequest.append("UNSIGNED-PAYLOAD");

String userProvidedHash = canonicalizedExtensionHeaders.get("X-Goog-Content-SHA256");
canonicalRequest.append(userProvidedHash == null ? "UNSIGNED-PAYLOAD" : userProvidedHash);

return Hashing.sha256()
.hashString(canonicalRequest.toString(), StandardCharsets.UTF_8)
Original file line number Diff line number Diff line change
@@ -161,6 +161,21 @@ public String getSelector() {
}
}

enum UriScheme {
HTTP("http"),
HTTPS("https");

private final String scheme;

UriScheme(String scheme) {
this.scheme = scheme;
}

public String getScheme() {
return scheme;
}
}

/** Class for specifying bucket target options. */
class BucketTargetOption extends Option {

@@ -567,7 +582,8 @@ enum Option {
IF_CRC32C_MATCH,
CUSTOMER_SUPPLIED_KEY,
KMS_KEY_NAME,
USER_PROJECT;
USER_PROJECT,
IF_DISABLE_GZIP_CONTENT;

StorageRpc.Option toRpcOption() {
return StorageRpc.Option.valueOf(this.name());
@@ -699,6 +715,14 @@ public static BlobWriteOption kmsKeyName(String kmsKeyName) {
public static BlobWriteOption userProject(String userProject) {
return new BlobWriteOption(Option.USER_PROJECT, userProject);
}

/**
* Returns an option that signals automatic gzip compression should not be performed en route to
* the bucket.
*/
public static BlobWriteOption disableGzipContent() {
return new BlobWriteOption(Option.IF_DISABLE_GZIP_CONTENT, true);
}
}

/** Class for specifying blob source options. */
@@ -988,6 +1012,16 @@ public static BlobListOption currentDirectory() {
return new BlobListOption(StorageRpc.Option.DELIMITER, true);
}

/**
* Returns an option to set a delimiter.
*
* @param delimiter generally '/' is the one used most often, but you can used other delimiters
* as well.
*/
public static BlobListOption delimiter(String delimiter) {
return new BlobListOption(StorageRpc.Option.DELIMITER, delimiter);
}

/**
* Returns an option to define the billing user project. This option is required by buckets with
* `requester_pays` flag enabled to assign operation costs.
@@ -1038,6 +1072,7 @@ enum Option {
HOST_NAME,
PATH_STYLE,
VIRTUAL_HOSTED_STYLE,
BUCKET_BOUND_HOST_NAME,
QUERY_PARAMS
}

@@ -1160,6 +1195,44 @@ public static SignUrlOption withPathStyle() {
return new SignUrlOption(Option.PATH_STYLE, "");
}

/**
* Use a bucket-bound hostname, which replaces the storage.googleapis.com host with the name of
* a CNAME bucket, e.g. a bucket named 'gcs-subdomain.my.domain.tld', or a Google Cloud Load
* Balancer which routes to a bucket you own, e.g. 'my-load-balancer-domain.tld'. Note that this
* cannot be used alongside {@code withVirtualHostedStyle()} or {@code withPathStyle()}. This
* method signature uses HTTP for the URI scheme, and is equivalent to calling {@code
* withBucketBoundHostname("...", UriScheme.HTTP).}
*
* @see <a href="https://cloud.google.com/storage/docs/request-endpoints#cname">CNAME
* Redirects</a>
* @see <a
* href="https://cloud.google.com/load-balancing/docs/https/adding-backend-buckets-to-load-balancers">
* GCLB Redirects</a>
*/
public static SignUrlOption withBucketBoundHostname(String bucketBoundHostname) {
return withBucketBoundHostname(bucketBoundHostname, UriScheme.HTTP);
}

/**
* Use a bucket-bound hostname, which replaces the storage.googleapis.com host with the name of
* a CNAME bucket, e.g. a bucket named 'gcs-subdomain.my.domain.tld', or a Google Cloud Load
* Balancer which routes to a bucket you own, e.g. 'my-load-balancer-domain.tld'. Note that this
* cannot be used alongside {@code withVirtualHostedStyle()} or {@code withPathStyle()}. The
* bucket name itself should not include the URI scheme (http or https), so it is specified via
* a local enum.
*
* @see <a href="https://cloud.google.com/storage/docs/request-endpoints#cname">CNAME
* Redirects</a>
* @see <a
* href="https://cloud.google.com/load-balancing/docs/https/adding-backend-buckets-to-load-balancers">
* GCLB Redirects</a>
*/
public static SignUrlOption withBucketBoundHostname(
String bucketBoundHostname, UriScheme uriScheme) {
return new SignUrlOption(
Option.BUCKET_BOUND_HOST_NAME, uriScheme.getScheme() + "://" + bucketBoundHostname);
}

/**
* Use if the URL should contain additional query parameters.
*
Original file line number Diff line number Diff line change
@@ -660,8 +660,10 @@ public URL signUrl(BlobInfo blobInfo, long duration, TimeUnit unit, SignUrlOptio

checkArgument(
!(optionMap.containsKey(SignUrlOption.Option.VIRTUAL_HOSTED_STYLE)
&& optionMap.containsKey(SignUrlOption.Option.PATH_STYLE)),
"Cannot specify both the VIRTUAL_HOSTED_STYLE and PATH_STYLE SignUrlOptions together.");
&& optionMap.containsKey(SignUrlOption.Option.PATH_STYLE)
&& optionMap.containsKey(SignUrlOption.Option.BUCKET_BOUND_HOST_NAME)),
"Only one of VIRTUAL_HOSTED_STYLE, PATH_STYLE, or BUCKET_BOUND_HOST_NAME SignUrlOptions can be"
+ " specified.");

String bucketName = slashlessBucketNameFromBlobInfo(blobInfo);
String escapedBlobName = "";
@@ -676,6 +678,10 @@ public URL signUrl(BlobInfo blobInfo, long duration, TimeUnit unit, SignUrlOptio
? STORAGE_XML_URI_SCHEME + "://" + getBaseStorageHostName(optionMap)
: STORAGE_XML_URI_SCHEME + "://" + bucketName + "." + getBaseStorageHostName(optionMap);

if (optionMap.containsKey(SignUrlOption.Option.BUCKET_BOUND_HOST_NAME)) {
storageXmlHostName = (String) optionMap.get(SignUrlOption.Option.BUCKET_BOUND_HOST_NAME);
}

String stPath =
usePathStyle
? constructResourceUriPath(bucketName, escapedBlobName, optionMap)
@@ -753,9 +759,7 @@ private String constructResourceUriPath(
}
return pathBuilder.toString();
}
if (!escapedBlobName.startsWith(PATH_DELIMITER)) {
pathBuilder.append(PATH_DELIMITER);
}
pathBuilder.append(PATH_DELIMITER);
pathBuilder.append(escapedBlobName);
return pathBuilder.toString();
}
@@ -776,7 +780,8 @@ private SignUrlOption.SignatureVersion getPreferredSignatureVersion(
private boolean shouldUsePathStyleForSignedUrl(EnumMap<SignUrlOption.Option, Object> optionMap) {
// TODO(#6362): If we decide to change the default style used to generate URLs, switch this
// logic to return false unless PATH_STYLE was explicitly specified.
if (optionMap.containsKey(SignUrlOption.Option.VIRTUAL_HOSTED_STYLE)) {
if (optionMap.containsKey(SignUrlOption.Option.VIRTUAL_HOSTED_STYLE)
|| optionMap.containsKey(SignUrlOption.Option.BUCKET_BOUND_HOST_NAME)) {
return false;
}
return true;
@@ -836,7 +841,8 @@ private SignatureInfo buildSignatureInfo(
extHeadersBuilder.put(
"host",
slashlessBucketNameFromBlobInfo(blobInfo) + "." + getBaseStorageHostName(optionMap));
} else if (optionMap.containsKey(SignUrlOption.Option.HOST_NAME)) {
} else if (optionMap.containsKey(SignUrlOption.Option.HOST_NAME)
|| optionMap.containsKey(SignUrlOption.Option.BUCKET_BOUND_HOST_NAME)) {
extHeadersBuilder.put("host", getBaseStorageHostName(optionMap));
}
}
@@ -868,9 +874,14 @@ private String slashlessBucketNameFromBlobInfo(BlobInfo blobInfo) {
/** Returns the hostname used to send requests to Cloud Storage, e.g. "storage.googleapis.com". */
private String getBaseStorageHostName(Map<SignUrlOption.Option, Object> optionMap) {
String specifiedBaseHostName = (String) optionMap.get(SignUrlOption.Option.HOST_NAME);
String bucketBoundHostName =
(String) optionMap.get(SignUrlOption.Option.BUCKET_BOUND_HOST_NAME);
if (!Strings.isNullOrEmpty(specifiedBaseHostName)) {
return specifiedBaseHostName.replaceFirst("http(s)?://", "");
}
if (!Strings.isNullOrEmpty(bucketBoundHostName)) {
return bucketBoundHostName.replaceFirst("http(s)?://", "");
}
return STORAGE_XML_URI_HOST_NAME;
}

@@ -1583,9 +1594,11 @@ private static <T> void addToOptionMap(
Object prev = temp.put(option.getRpcOption(), option.getValue());
checkArgument(prev == null, "Duplicate option %s", option);
}
Boolean value = (Boolean) temp.remove(DELIMITER);
if (Boolean.TRUE.equals(value)) {
if (Boolean.TRUE.equals(temp.get(DELIMITER))) {
temp.remove(DELIMITER);
temp.put(DELIMITER, PATH_DELIMITER);
} else if (null != temp.get(DELIMITER)) {
temp.put(DELIMITER, temp.get(DELIMITER));
}
if (useAsSource) {
addToOptionMap(IF_GENERATION_MATCH, IF_SOURCE_GENERATION_MATCH, generation, temp);
Original file line number Diff line number Diff line change
@@ -27,6 +27,7 @@
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

@@ -46,10 +47,9 @@
import org.easymock.Capture;
import org.easymock.CaptureType;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

public class BlobWriteChannelTest {

@@ -59,14 +59,12 @@ public class BlobWriteChannelTest {
private static final BlobInfo BLOB_INFO = BlobInfo.newBuilder(BUCKET_NAME, BLOB_NAME).build();
private static final Map<StorageRpc.Option, ?> EMPTY_RPC_OPTIONS = ImmutableMap.of();
private static final int MIN_CHUNK_SIZE = 256 * 1024;
private static final int DEFAULT_CHUNK_SIZE = 8 * MIN_CHUNK_SIZE;
private static final int DEFAULT_CHUNK_SIZE = 60 * MIN_CHUNK_SIZE; // 15MiB
private static final int CUSTOM_CHUNK_SIZE = 4 * MIN_CHUNK_SIZE;
private static final Random RANDOM = new Random();
private static final String SIGNED_URL =
"http://www.test.com/test-bucket/test1.txt?GoogleAccessId=testClient-test@test.com&Expires=1553839761&Signature=MJUBXAZ7";

@Rule public ExpectedException thrown = ExpectedException.none();

private StorageOptions options;
private StorageRpcFactory rpcFactoryMock;
private StorageRpc storageRpcMock;
@@ -113,8 +111,12 @@ public void testCreateNonRetryableError() {
expect(storageRpcMock.open(BLOB_INFO.toPb(), EMPTY_RPC_OPTIONS))
.andThrow(new RuntimeException());
replay(storageRpcMock);
thrown.expect(RuntimeException.class);
new BlobWriteChannel(options, BLOB_INFO, EMPTY_RPC_OPTIONS);
try {
new BlobWriteChannel(options, BLOB_INFO, EMPTY_RPC_OPTIONS);
Assert.fail();
} catch (RuntimeException ex) {
assertNotNull(ex.getMessage());
}
}

@Test
@@ -391,9 +393,12 @@ public void testRuntimeExceptionWithSignedURL() throws MalformedURLException {
expect(new BlobWriteChannel(options, new URL(SIGNED_URL)))
.andThrow(new RuntimeException(exceptionMessage));
replay(storageRpcMock);
thrown.expect(StorageException.class);
thrown.expectMessage(exceptionMessage);
writer = new BlobWriteChannel(options, new URL(SIGNED_URL));
try {
writer = new BlobWriteChannel(options, new URL(SIGNED_URL));
Assert.fail();
} catch (StorageException ex) {
assertNotNull(ex.getMessage());
}
}

private static ByteBuffer randomBuffer(int size) {
Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

@@ -52,10 +53,9 @@
import java.util.Map;
import javax.crypto.spec.SecretKeySpec;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

public class BucketTest {

@@ -135,8 +135,6 @@ public class BucketTest {
private Bucket expectedBucket;
private List<Blob> blobResults;

@Rule public ExpectedException thrown = ExpectedException.none();

@Before
public void setUp() {
storage = createStrictMock(Storage.class);
@@ -446,15 +444,17 @@ public void testCreateWithWrongGenerationOptions() throws Exception {
replay(storage);
initializeBucket();
byte[] content = {0xD, 0xE, 0xA, 0xD};
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage(
"Only one option of generationMatch, doesNotExist or generationNotMatch can be provided");
bucket.create(
"n",
content,
CONTENT_TYPE,
Bucket.BlobTargetOption.generationMatch(42L),
Bucket.BlobTargetOption.generationNotMatch(24L));
try {
bucket.create(
"n",
content,
CONTENT_TYPE,
Bucket.BlobTargetOption.generationMatch(42L),
Bucket.BlobTargetOption.generationNotMatch(24L));
Assert.fail();
} catch (IllegalArgumentException ex) {
assertNotNull(ex.getMessage());
}
}

@Test
@@ -464,15 +464,17 @@ public void testCreateWithWrongMetagenerationOptions() throws Exception {
replay(storage);
initializeBucket();
byte[] content = {0xD, 0xE, 0xA, 0xD};
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage(
"metagenerationMatch and metagenerationNotMatch options can not be both provided");
bucket.create(
"n",
content,
CONTENT_TYPE,
Bucket.BlobTargetOption.metagenerationMatch(42L),
Bucket.BlobTargetOption.metagenerationNotMatch(24L));
try {
bucket.create(
"n",
content,
CONTENT_TYPE,
Bucket.BlobTargetOption.metagenerationMatch(42L),
Bucket.BlobTargetOption.metagenerationNotMatch(24L));
Assert.fail();
} catch (IllegalArgumentException ex) {
assertNotNull(ex.getMessage());
}
}

@Test
@@ -592,15 +594,17 @@ public void testCreateFromStreamWithWrongGenerationOptions() throws Exception {
initializeBucket();
byte[] content = {0xD, 0xE, 0xA, 0xD};
InputStream streamContent = new ByteArrayInputStream(content);
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage(
"Only one option of generationMatch, doesNotExist or generationNotMatch can be provided");
bucket.create(
"n",
streamContent,
CONTENT_TYPE,
Bucket.BlobWriteOption.generationMatch(42L),
Bucket.BlobWriteOption.generationNotMatch(24L));
try {
bucket.create(
"n",
streamContent,
CONTENT_TYPE,
Bucket.BlobWriteOption.generationMatch(42L),
Bucket.BlobWriteOption.generationNotMatch(24L));
Assert.fail();
} catch (IllegalArgumentException ex) {
assertNotNull(ex.getMessage());
}
}

@Test
@@ -611,15 +615,17 @@ public void testCreateFromStreamWithWrongMetagenerationOptions() throws Exceptio
initializeBucket();
byte[] content = {0xD, 0xE, 0xA, 0xD};
InputStream streamContent = new ByteArrayInputStream(content);
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage(
"metagenerationMatch and metagenerationNotMatch options can not be both provided");
bucket.create(
"n",
streamContent,
CONTENT_TYPE,
Bucket.BlobWriteOption.metagenerationMatch(42L),
Bucket.BlobWriteOption.metagenerationNotMatch(24L));
try {
bucket.create(
"n",
streamContent,
CONTENT_TYPE,
Bucket.BlobWriteOption.metagenerationMatch(42L),
Bucket.BlobWriteOption.metagenerationNotMatch(24L));
Assert.fail();
} catch (IllegalArgumentException ex) {
assertNotNull(ex.getMessage());
}
}

@Test
Original file line number Diff line number Diff line change
@@ -86,11 +86,10 @@
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;

public class StorageImplTest {

@@ -384,8 +383,6 @@ public long millisTime() {
private Blob expectedBlob1, expectedBlob2, expectedBlob3;
private Bucket expectedBucket1, expectedBucket2, expectedBucket3;

@Rule public ExpectedException thrown = ExpectedException.none();

@BeforeClass
public static void beforeClass() throws NoSuchAlgorithmException, InvalidKeySpecException {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
@@ -741,6 +738,33 @@ public void testCreateBlobFromStream() throws IOException {
assertEquals(-1, byteStream.read(streamBytes));
}

@Test
public void testCreateBlobFromStreamDisableGzipContent() throws IOException {
Capture<ByteArrayInputStream> capturedStream = Capture.newInstance();

ByteArrayInputStream fileStream = new ByteArrayInputStream(BLOB_CONTENT);
BlobInfo.Builder infoBuilder = BLOB_INFO1.toBuilder();
BlobInfo infoWithHashes = infoBuilder.setMd5(CONTENT_MD5).setCrc32c(CONTENT_CRC32C).build();
BlobInfo infoWithoutHashes = infoBuilder.setMd5(null).setCrc32c(null).build();
EasyMock.expect(
storageRpcMock.create(
EasyMock.eq(infoWithoutHashes.toPb()),
EasyMock.capture(capturedStream),
EasyMock.eq(BLOB_TARGET_OPTIONS_CREATE_DISABLE_GZIP_CONTENT)))
.andReturn(BLOB_INFO1.toPb());
EasyMock.replay(storageRpcMock);
initializeService();

Blob blob = storage.create(infoWithHashes, fileStream, BlobWriteOption.disableGzipContent());

assertEquals(expectedBlob1, blob);
ByteArrayInputStream byteStream = capturedStream.getValue();
byte[] streamBytes = new byte[BLOB_CONTENT.length];
assertEquals(BLOB_CONTENT.length, byteStream.read(streamBytes));
assertArrayEquals(BLOB_CONTENT, streamBytes);
assertEquals(-1, byteStream.read(streamBytes));
}

@Test
public void testCreateBlobFromStreamWithEncryptionKey() throws IOException {
ByteArrayInputStream fileStream = new ByteArrayInputStream(BLOB_CONTENT);
@@ -785,9 +809,12 @@ public void testCreateBlobFromStreamRetryableException() throws IOException {

// Even though this exception is retryable, storage.create(BlobInfo, InputStream)
// shouldn't retry.
thrown.expect(StorageException.class);
thrown.expectMessage("internalError");
storage.create(infoWithHashes, fileStream);
try {
storage.create(infoWithHashes, fileStream);
Assert.fail();
} catch (StorageException ex) {
assertNotNull(ex.getMessage());
}
}

@Test
@@ -1166,6 +1193,23 @@ public void testListBlobsCurrentDirectory() {
assertArrayEquals(blobList.toArray(), Iterables.toArray(page.getValues(), Blob.class));
}

@Test
public void testListBlobsDelimiter() {
String cursor = "cursor";
String delimiter = "/";
Map<StorageRpc.Option, ?> options = ImmutableMap.of(StorageRpc.Option.DELIMITER, delimiter);
ImmutableList<BlobInfo> blobInfoList = ImmutableList.of(BLOB_INFO1, BLOB_INFO2);
Tuple<String, Iterable<com.google.api.services.storage.model.StorageObject>> result =
Tuple.of(cursor, Iterables.transform(blobInfoList, BlobInfo.INFO_TO_PB_FUNCTION));
EasyMock.expect(storageRpcMock.list(BUCKET_NAME1, options)).andReturn(result);
EasyMock.replay(storageRpcMock);
initializeService();
ImmutableList<Blob> blobList = ImmutableList.of(expectedBlob1, expectedBlob2);
Page<Blob> page = storage.list(BUCKET_NAME1, Storage.BlobListOption.delimiter(delimiter));
assertEquals(cursor, page.getNextPageToken());
assertArrayEquals(blobList.toArray(), Iterables.toArray(page.getValues(), Blob.class));
}

@Test
public void testUpdateBucket() {
BucketInfo updatedBucketInfo = BUCKET_INFO1.toBuilder().setIndexPage("some-page").build();
@@ -1808,6 +1852,7 @@ public void testSignUrlLeadingSlash()
String expectedUrl =
new StringBuilder("https://storage.googleapis.com/")
.append(BUCKET_NAME1)
.append("/")
.append(expectedResourcePath)
.append("?GoogleAccessId=")
.append(ACCOUNT)
@@ -1825,6 +1870,7 @@ public void testSignUrlLeadingSlash()
.append(42L + 1209600)
.append("\n/")
.append(BUCKET_NAME1)
.append("/")
.append(expectedResourcePath);

Signature signer = Signature.getInstance("SHA256withRSA");
@@ -1857,6 +1903,7 @@ public void testSignUrlLeadingSlashWithHostName()
String expectedUrl =
new StringBuilder("https://example.com/")
.append(BUCKET_NAME1)
.append("/")
.append(escapedBlobName)
.append("?GoogleAccessId=")
.append(ACCOUNT)
@@ -1874,6 +1921,7 @@ public void testSignUrlLeadingSlashWithHostName()
.append(42L + 1209600)
.append("\n/")
.append(BUCKET_NAME1)
.append("/")
.append(escapedBlobName);

Signature signer = Signature.getInstance("SHA256withRSA");
@@ -2019,6 +2067,7 @@ public void testSignUrlForBlobWithSpecialChars()
String expectedUrl =
new StringBuilder("https://storage.googleapis.com/")
.append(BUCKET_NAME1)
.append("/")
.append(expectedBlobName)
.append("?GoogleAccessId=")
.append(ACCOUNT)
@@ -2036,6 +2085,7 @@ public void testSignUrlForBlobWithSpecialChars()
.append(42L + 1209600)
.append("\n/")
.append(BUCKET_NAME1)
.append("/")
.append(expectedBlobName);

Signature signer = Signature.getInstance("SHA256withRSA");
@@ -2075,6 +2125,7 @@ public void testSignUrlForBlobWithSpecialCharsAndHostName()
String expectedUrl =
new StringBuilder("https://example.com/")
.append(BUCKET_NAME1)
.append("/")
.append(expectedBlobName)
.append("?GoogleAccessId=")
.append(ACCOUNT)
@@ -2092,6 +2143,7 @@ public void testSignUrlForBlobWithSpecialCharsAndHostName()
.append(42L + 1209600)
.append("\n/")
.append(BUCKET_NAME1)
.append("/")
.append(expectedBlobName);

Signature signer = Signature.getInstance("SHA256withRSA");
@@ -2243,6 +2295,7 @@ public void testSignUrlForBlobWithSlashes()
String expectedUrl =
new StringBuilder("https://storage.googleapis.com/")
.append(BUCKET_NAME1)
.append("/")
.append(escapedBlobName)
.append("?GoogleAccessId=")
.append(ACCOUNT)
@@ -2260,6 +2313,7 @@ public void testSignUrlForBlobWithSlashes()
.append(42L + 1209600)
.append("\n/")
.append(BUCKET_NAME1)
.append("/")
.append(escapedBlobName);

Signature signer = Signature.getInstance("SHA256withRSA");
@@ -2293,6 +2347,7 @@ public void testSignUrlForBlobWithSlashesAndHostName()
String expectedUrl =
new StringBuilder("https://example.com/")
.append(BUCKET_NAME1)
.append("/")
.append(escapedBlobName)
.append("?GoogleAccessId=")
.append(ACCOUNT)
@@ -2310,6 +2365,7 @@ public void testSignUrlForBlobWithSlashesAndHostName()
.append(42L + 1209600)
.append("\n/")
.append(BUCKET_NAME1)
.append("/")
.append(escapedBlobName);

Signature signer = Signature.getInstance("SHA256withRSA");
@@ -2973,9 +3029,12 @@ public void testNonRetryableException() {
.build()
.getService();
initializeServiceDependentObjects();
thrown.expect(StorageException.class);
thrown.expectMessage(exceptionMessage);
storage.get(blob);
try {
storage.get(blob);
Assert.fail();
} catch (StorageException ex) {
Assert.assertNotNull(ex.getMessage());
}
}

@Test
@@ -2991,9 +3050,12 @@ public void testRuntimeException() {
.setRetrySettings(ServiceOptions.getDefaultRetrySettings())
.build()
.getService();
thrown.expect(StorageException.class);
thrown.expectMessage(exceptionMessage);
storage.get(blob);
try {
storage.get(blob);
Assert.fail();
} catch (StorageException ex) {
Assert.assertNotNull(ex.getMessage());
}
}

@Test
Original file line number Diff line number Diff line change
@@ -29,7 +29,8 @@ public void testInvalidTransport() {
StorageOptions.newBuilder()
.setTransportOptions(EasyMock.<TransportOptions>createMock(TransportOptions.class));
Assert.fail();
} catch (IllegalArgumentException expected) {
} catch (IllegalArgumentException ex) {
Assert.assertNotNull(ex.getMessage());
}
}
}
Original file line number Diff line number Diff line change
@@ -16,11 +16,8 @@

package com.google.cloud.storage;

import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assume.assumeThat;

import com.google.api.core.ApiClock;
import com.google.auth.oauth2.ServiceAccountCredentials;
@@ -94,11 +91,6 @@ public V4SigningTest(

@Test
public void test() {
assumeThat(
"Test skipped until b/136171758 is resolved",
testName.getMethodName(),
is(not("test[Headers should be trimmed]")));

Storage storage =
RemoteStorageHelper.create()
.getOptions()
@@ -110,6 +102,19 @@ public void test() {

BlobInfo blob = BlobInfo.newBuilder(testData.getBucket(), testData.getObject()).build();

SignUrlOption style = SignUrlOption.withPathStyle();

if (testData.getUrlStyle().equals(SigningV4Test.UrlStyle.VIRTUAL_HOSTED_STYLE)) {
style = SignUrlOption.withVirtualHostedStyle();
} else if (testData.getUrlStyle().equals(SigningV4Test.UrlStyle.PATH_STYLE)) {
style = SignUrlOption.withPathStyle();
} else if (testData.getUrlStyle().equals(SigningV4Test.UrlStyle.BUCKET_BOUND_DOMAIN)) {
style =
SignUrlOption.withBucketBoundHostname(
testData.getBucketBoundDomain(),
Storage.UriScheme.valueOf(testData.getScheme().toUpperCase()));
}

final String signedUrl =
storage
.signUrl(
@@ -118,7 +123,9 @@ public void test() {
TimeUnit.SECONDS,
SignUrlOption.httpMethod(HttpMethod.valueOf(testData.getMethod())),
SignUrlOption.withExtHeaders(testData.getHeadersMap()),
SignUrlOption.withV4Signature())
SignUrlOption.withV4Signature(),
SignUrlOption.withQueryParams(testData.getQueryParametersMap()),
style)
.toString();
assertEquals(testData.getExpectedUrl(), signedUrl);
}
Original file line number Diff line number Diff line change
@@ -69,6 +69,7 @@
import com.google.cloud.storage.ServiceAccount;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.Storage.BlobField;
import com.google.cloud.storage.Storage.BlobWriteOption;
import com.google.cloud.storage.Storage.BucketField;
import com.google.cloud.storage.StorageBatch;
import com.google.cloud.storage.StorageBatchResult;
@@ -597,6 +598,20 @@ public void testCreateBlobStream() {
assertEquals(BLOB_STRING_CONTENT, new String(readBytes, UTF_8));
}

@Test
public void testCreateBlobStreamDisableGzipContent() {
String blobName = "test-create-blob-stream-disable-gzip-compression";
BlobInfo blob = BlobInfo.newBuilder(BUCKET, blobName).setContentType(CONTENT_TYPE).build();
ByteArrayInputStream stream = new ByteArrayInputStream(BLOB_STRING_CONTENT.getBytes(UTF_8));
Blob remoteBlob = storage.create(blob, stream, BlobWriteOption.disableGzipContent());
assertNotNull(remoteBlob);
assertEquals(blob.getBucket(), remoteBlob.getBucket());
assertEquals(blob.getName(), remoteBlob.getName());
assertEquals(blob.getContentType(), remoteBlob.getContentType());
byte[] readBytes = storage.readAllBytes(BUCKET, blobName);
assertEquals(BLOB_STRING_CONTENT, new String(readBytes, UTF_8));
}

@Test
public void testCreateBlobFail() {
String blobName = "test-create-blob-fail";
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import com.google.api.gax.paging.Page;
@@ -37,10 +38,9 @@
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.threeten.bp.Duration;

public class RemoteStorageHelperTest {
@@ -86,8 +86,6 @@ public class RemoteStorageHelperTest {
private List<Blob> blobList;
private Page<Blob> blobPage;

@Rule public ExpectedException thrown = ExpectedException.none();

@Before
public void setUp() {
blob1 = EasyMock.createMock(Blob.class);
@@ -175,9 +173,11 @@ public void testForceDeleteFail() throws InterruptedException, ExecutionExceptio
.andReturn(blobPage);
EasyMock.expect(storageMock.delete(BUCKET_NAME)).andThrow(FATAL_EXCEPTION);
EasyMock.replay(storageMock, blob1, blob2);
thrown.expect(ExecutionException.class);
try {
RemoteStorageHelper.forceDelete(storageMock, BUCKET_NAME, 5, TimeUnit.SECONDS);
Assert.fail();
} catch (ExecutionException ex) {
assertNotNull(ex.getMessage());
} finally {
EasyMock.verify(storageMock);
}
@@ -213,9 +213,11 @@ public void testForceDeleteNoTimeoutFail() {
.andReturn(blobPage);
EasyMock.expect(storageMock.delete(BUCKET_NAME)).andThrow(FATAL_EXCEPTION);
EasyMock.replay(storageMock, blob1, blob2);
thrown.expect(StorageException.class);
try {
RemoteStorageHelper.forceDelete(storageMock, BUCKET_NAME);
Assert.fail();
} catch (StorageException ex) {
assertNotNull(ex.getMessage());
} finally {
EasyMock.verify(storageMock);
}
33 changes: 12 additions & 21 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage-parent</artifactId>
<packaging>pom</packaging>
<version>1.103.1</version><!-- {x-version-update:google-cloud-storage:current} -->
<version>1.104.0</version><!-- {x-version-update:google-cloud-storage:current} -->
<name>Storage Parent</name>
<url>https://github.com/googleapis/java-storage</url>
<description>
@@ -63,13 +63,13 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<github.global.server>github</github.global.server>
<site.installationModule>google-cloud-storage-parent</site.installationModule>
<google.core.version>1.91.3</google.core.version>
<google.core.version>1.92.5</google.core.version>
<google.api-common.version>1.8.1</google.api-common.version>
<junit.version>4.13</junit.version>
<threeten.version>1.4.1</threeten.version>
<javax.annotations.version>1.3.2</javax.annotations.version>
<animal-sniffer.version>1.18</animal-sniffer.version>
<opencensus.version>0.24.0</opencensus.version>
<opencensus.version>0.25.0</opencensus.version>
</properties>

<dependencyManagement>
@@ -82,14 +82,7 @@
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-bom</artifactId>
<version>1.34.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>1.30.7</version>
<version>1.34.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@@ -110,21 +103,21 @@
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-bom</artifactId>
<version>1.26.0</version>
<version>1.27.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.api</groupId>
<artifactId>gax-bom</artifactId>
<version>1.53.0</version>
<version>1.53.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-bom</artifactId>
<version>3.11.1</version>
<version>3.11.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
@@ -133,11 +126,6 @@
<artifactId>google-api-services-storage</artifactId>
<version>v1-rev20191011-1.30.3</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>28.2-android</version>
</dependency>
<dependency>
<groupId>org.checkerframework</groupId>
<artifactId>checker-compat-qual</artifactId>
@@ -224,7 +212,7 @@
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-conformance-tests</artifactId>
<version>0.0.4</version>
<version>0.0.5</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -237,7 +225,10 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<ignoredUnusedDeclaredDependencies>org.objenesis:objenesis</ignoredUnusedDeclaredDependencies>
<ignoredUnusedDeclaredDependencies>
<ignoredUnusedDeclaredDependency>org.hamcrest:hamcrest</ignoredUnusedDeclaredDependency>
<ignoredUnusedDeclaredDependency>org.objenesis:objenesis</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
</configuration>
</plugin>
</plugins>
3 changes: 2 additions & 1 deletion renovate.json
Original file line number Diff line number Diff line change
@@ -22,7 +22,8 @@
"^com.google.api:gax",
"^com.google.auth:",
"^com.google.cloud:google-cloud-core",
"^io.grpc:"
"^io.grpc:",
"^com.google.guava:"
],
"groupName": "core dependencies"
},
418 changes: 1 addition & 417 deletions synth.metadata

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion versions.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Format:
# module:released-version:current-version

google-cloud-storage:1.103.1:1.103.1
google-cloud-storage:1.104.0:1.104.0