Is there Google Cloud Storage emulator? [closed]
Asked Answered
V

2

32

For the purpose of testing, I would like to mock Cloud Storage because it slows tests down.

Is there Google Cloud Storage emulator?

Value answered 31/5, 2016 at 9:58 Comment(1)
See this answer https://mcmap.net/q/454634/-can-i-run-firebase-storage-cloud-functions-locally they are possibly developing one now.Embosser
M
15

There isn't an official emulator provided by Google for the time being.

I'm currently using project Minio (https://www.minio.io/) for mocking Google Storage's behavior in development (Minio uses the filesystem as storage backend and provides compatibility with S3 apiV2, which is compatible with Google Storage).

Maker answered 3/8, 2016 at 17:14 Comment(5)
Can you provide some details on the setup please?Miticide
I would also be happy if you can provide some details. Are you able to create a Storage/Bucket reference that points to the local MinIO instance? Or you just mock out the service which calls the Cloud Storage APIs and you store the files via the mock service?Lorsung
I don't have access to the project setup anymore, but since I answered this questions Google has developed an emulator for Storage: github.com/googleapis/google-cloud-java/blob/master/…Maker
That emulator seems to be just a java class implementing the cloud storage interface of the java client, so it's really just dedicated to java developersMalcommalcontent
The file mentioned by Caio was deleted, the latest version is: github.com/googleapis/google-cloud-java/blob/…Citronella
P
43

Google has an in-memory emulator you can use (majority of core functions are implemented).

You need com.google.cloud:google-cloud-nio on your test classpath (:0.25.0-alpha currently). Then you can use/inject Storage interface implemented by the in-memory LocalStorageHelper test-helper service.

Example usage:

import com.google.cloud.storage.Storage;
import com.google.cloud.storage.contrib.nio.testing.LocalStorageHelper;

@Test
public void exampleInMemoryGoogleStorageTest() {
    Storage storage = LocalStorageHelper.getOptions().getService();
    
    final String blobPath = "test/path/foo.txt";
    final String testBucketName = "test-bucket";
    BlobInfo blobInfo = BlobInfo.newBuilder(
        BlobId.of(testBucketName, blobPath)
    ).build();
    
    storage.create(blobInfo, "randomContent".getBytes(StandardCharsets.UTF_8));
    Iterable<Blob> allBlobsIter = storage.list(testBucketName).getValues();
    // expect to find the blob we saved when iterating over bucket blobs
    assertTrue(
        StreamSupport.stream(allBlobsIter.spliterator(), false)
            .map(BlobInfo::getName)
            .anyMatch(blobPath::equals)
    );
}
Peterkin answered 11/10, 2017 at 15:20 Comment(0)
M
15

There isn't an official emulator provided by Google for the time being.

I'm currently using project Minio (https://www.minio.io/) for mocking Google Storage's behavior in development (Minio uses the filesystem as storage backend and provides compatibility with S3 apiV2, which is compatible with Google Storage).

Maker answered 3/8, 2016 at 17:14 Comment(5)
Can you provide some details on the setup please?Miticide
I would also be happy if you can provide some details. Are you able to create a Storage/Bucket reference that points to the local MinIO instance? Or you just mock out the service which calls the Cloud Storage APIs and you store the files via the mock service?Lorsung
I don't have access to the project setup anymore, but since I answered this questions Google has developed an emulator for Storage: github.com/googleapis/google-cloud-java/blob/master/…Maker
That emulator seems to be just a java class implementing the cloud storage interface of the java client, so it's really just dedicated to java developersMalcommalcontent
The file mentioned by Caio was deleted, the latest version is: github.com/googleapis/google-cloud-java/blob/…Citronella

© 2022 - 2024 — McMap. All rights reserved.