Skip to content

Commit 3751460

Browse files
author
Ajay Kannan
committed
Document how to test
1 parent d14c314 commit 3751460

3 files changed

Lines changed: 78 additions & 0 deletions

File tree

TESTING.md

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
## gcloud-java tools for testing
2+
3+
gcloud-java provides tools to make testing your application easier.
4+
5+
### Testing interactions with Datastore
6+
7+
#### On your machine
8+
9+
You can test against a temporary local datastore by following these steps:
10+
11+
1. Start the local datastore emulator using `LocalGcdHelper`. This can be done in two ways:
12+
- Run `LocalGcdHelper.java`'s `main` method with arguments `START` and (optionally) `--port=<port number>`. This will create a temporary folder on your computer and bind `localhost:<port number>` for communication with the local datastore. The port number is an optional argument. If no port number is specified, port 8080 will be used.
13+
- Call `LocalGcdHelper.start(<project ID>, <port number>)` before running your tests. Save the `LocalGcdHelper` object returned so that you can stop the emulator later.
14+
15+
2. In your program, create and use a datastore whose host is set host to `localhost:<port number>`. For example,
16+
```java
17+
DatastoreOptions options = DatastoreOptions.builder()
18+
.projectId(PROJECT_ID)
19+
.host("localhost:8080")
20+
.build();
21+
Datastore localDatastore = DatastoreFactory.instance().get(options);
22+
```
23+
3. Run your tests.
24+
25+
4. Stop the local datastore emulator.
26+
- If you ran `LocalGcdHelper.java`'s `main` function to start the emulator, run `LocalGcdHelper.java`'s `main` method with arguments `STOP` and (optionally) `--port=<port number>`. If the port is not supplied, the program will attempt to close the last port started.
27+
- If you ran `LocalGcdHelper.start()` to start the emulator, call the `stop()` method on the `LocalGcdHelper` object returned by `LocalGcdHelper.start()`.
28+
29+
#### On a remote machine
30+
31+
You can test against a remote datastore emulator as well. To do this, set the `DatastoreOptions` project endpoint to the hostname of the remote machine, like the example below.
32+
33+
```java
34+
DatastoreOptions options = DatastoreOptions.builder()
35+
.projectId(PROJECT_ID)
36+
.host("http://<hostname of machine>")
37+
.build();
38+
Datastore localDatastore = DatastoreFactory.instance().get(options);
39+
```
40+
41+
Note that the remote datastore must be running before your tests are run. Also note that the `host` argument must start with "http://" or "https://".
42+
43+
44+
### Testing interactions with Storage
45+
46+
There currently isn't an emulator for Google Cloud Storage, so an alternative is to create a test project. `RemoteGcsHelper` contains convenience methods to make setting up and cleaning up the test project easier. To use this class, follow the steps below:
47+
48+
1. Create a test Google App Engine project.
49+
50+
2. Create and download a JSON key by going to the Google Developer's Console and clicking API's & Auth > Credentials > Add Credentials > Service Credentials. Choose "JSON", download the file, and note its location.
51+
52+
3. Set environment variables `GCLOUD_TESTS_PROJECT_ID` and `GCLOUD_TESTS_KEY_PATH` according to your test project's ID and the location of the newly-downloaded JSON key file.
53+
54+
4. Create and and use a `RemoteGcsHelper` object.
55+
Here is an example that uses the RemoteGcsHelper to create a bucket and clear the bucket at the end of the test.
56+
```java
57+
RemoteGcsHelper gcsHelper = RemoteGcsHelper.create();
58+
Storage storage = StorageFactory.instance().get(gcsHelper.options());
59+
String bucket = RemoteGcsHelper.generateBucketName();
60+
storage.create(BucketInfo.of(bucket));
61+
// Do tests using Storage
62+
RemoteGcsHelper.deleteBucketRecursively(storage, bucket, 5, TimeUnit.SECONDS);
63+
```

gcloud-java-datastore/README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ if (entity == null) {
6969
}
7070
```
7171

72+
Testing
73+
-------
74+
75+
This library makes testing interactions with Cloud Datastore easier by using a local datastore emulator.
76+
77+
See [TESTING] to read more about testing locally.
78+
7279
Contributing
7380
------------
7481

@@ -98,6 +105,7 @@ Apache 2.0 - See [LICENSE] for more information.
98105

99106
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
100107
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
108+
[TESTING]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/TESTING.md
101109
[cloud-platform]: https://cloud.google.com/
102110
[cloud-datastore]: https://cloud.google.com/datastore/docs
103111
[cloud-datastore-docs]: https://cloud.google.com/datastore/docs

gcloud-java-storage/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ Add this to your pom.xml file
2626
</dependency>
2727
```
2828

29+
Testing
30+
-------
31+
32+
This library makes testing interactions with Cloud Storage more convenient.
33+
34+
See [TESTING] to read more about testing.
2935

3036
Contributing
3137
------------
@@ -56,6 +62,7 @@ Apache 2.0 - See [LICENSE] for more information.
5662

5763
[CONTRIBUTING]:https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/CONTRIBUTING.md
5864
[LICENSE]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/LICENSE
65+
[TESTING]: https://github.com/GoogleCloudPlatform/gcloud-java/blob/master/TESTING.md
5966
[cloud-platform]: https://cloud.google.com/
6067

6168
[cloud-storage]: https://cloud.google.com/storage/

0 commit comments

Comments
 (0)