Skip to content

Commit efb3d7d

Browse files
committed
test(storage): add regression tests.
1 parent 771d3cc commit efb3d7d

4 files changed

Lines changed: 177 additions & 1 deletion

File tree

CONTRIBUTING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ To run the regression tests, first create and configure a project following the
1313
After that, set the following environment variables:
1414

1515
- **GCLOUD_TESTS_PROJECT_ID**: Developers Console project's ID (e.g. bamboo-shift-455)
16+
- **GCLOUD_TESTS_BUCKET_NAME**: The name of the bucket to use for the Cloud Storage API tests
1617
- **GCLOUD_TESTS_KEY**: The path to the JSON key file.
1718

1819
Lastly, create the indexes used in the datastore regression tests using the [gcloud command-line tool](https://developers.google.com/cloud/sdk/gcloud/) and the indexes that you can find in `regression/data/index/yaml`:
9.36 KB
Loading

regression/env.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
if (!process.env.GCLOUD_TESTS_PROJECT_ID &&
18+
!process.env.GCLOUD_TESTS_BUCKET_NAME &&
1819
!process.env.GCLOUD_TESTS_KEY) {
1920
var error = ['To run the regression tests, you need to set the value of some environment variables.',
2021
'Please check the README for instructions.'
@@ -24,5 +25,6 @@ if (!process.env.GCLOUD_TESTS_PROJECT_ID &&
2425

2526
module.exports = {
2627
projectId: process.env.GCLOUD_TESTS_PROJECT_ID,
27-
keyFilename: process.env.GCLOUD_TESTS_KEY
28+
bucketName: process.env.GCLOUD_TESTS_BUCKET_NAME,
29+
keyFilename: process.env.GCLOUD_TESTS_KEY,
2830
};

regression/storage.js

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
/**
2+
* Copyright 2014 Google Inc. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
var assert = require('assert'),
18+
fs = require('fs');
19+
20+
var env = require('./env.js'),
21+
gcloud = require('../lib'),
22+
bucket = new gcloud.storage.Bucket(env);
23+
24+
var pathToLogoFile = 'regression/data/CloudPlatform_128px_Retina.png';
25+
var pathToReadFile = 'regression/data/readfile.txt';
26+
27+
describe('storage', function() {
28+
29+
describe('write, read and remove files', function() {
30+
31+
it('should write/remove from file', function(done) {
32+
var fileName = 'CloudLogo';
33+
bucket.write(fileName, { filename: pathToLogoFile }, function(err, fileObject, resp) {
34+
if (err) { return done(err); }
35+
assert(fileObject);
36+
bucket.remove(fileName, function(err) {
37+
if (err) { return done(err); }
38+
done();
39+
});
40+
});
41+
});
42+
43+
it('should write/remove from stream', function(done) {
44+
var fileName = 'CloudLogo';
45+
bucket.write(fileName, { data: fs.createReadStream(pathToLogoFile) },
46+
function(err, fileObject) {
47+
if (err) { return done(err); }
48+
assert(fileObject);
49+
bucket.remove(fileName, function(err) {
50+
if (err) { return done(err); }
51+
done();
52+
});
53+
});
54+
});
55+
56+
it('should write/read/remove from a buffer', function(done) {
57+
var fileName = 'MyBuffer',
58+
fileContent = 'Hello World';
59+
bucket.write(fileName, { data: fileContent }, function(err, fileObject) {
60+
if (err) { return done(err); }
61+
assert(fileObject);
62+
var content = '';
63+
bucket.createReadStream(fileName)
64+
.pipe(fs.createWriteStream(pathToReadFile))
65+
.on('error', done)
66+
.on('complete', function(content) {
67+
bucket.remove(fileName, function(err) {
68+
if (err) { return done(err); }
69+
fs.readFile(pathToReadFile, function(err, data) {
70+
assert.equal(data, fileContent);
71+
fs.unlink(pathToReadFile, function(err) {
72+
if (err) { return done(err); }
73+
done();
74+
});
75+
});
76+
});
77+
});
78+
});
79+
});
80+
81+
it('should write and read metadata', function(done) {
82+
var fileName = 'CloudLogo',
83+
myMetadata = { contentType: 'image/png'};
84+
bucket.write(fileName, { filename: pathToLogoFile, metadata: myMetadata },
85+
function(err, fileObject) {
86+
if (err) { return done(err); }
87+
bucket.stat(fileName, function(err, metadata) {
88+
if (err) { return done(err); }
89+
assert.equal(metadata['contentType'], myMetadata['contentType']);
90+
bucket.remove(fileName, function(err) {
91+
if (err) { return done(err); }
92+
done();
93+
});
94+
});
95+
});
96+
});
97+
98+
it('should copy an existing file', function(done) {
99+
var fileName = 'CloudLogo',
100+
copyName = 'CloudLogoCopy';
101+
102+
bucket.write(fileName, { filename: pathToLogoFile }, function(err, fileObject) {
103+
if (err) { return done(err); }
104+
bucket.copy(fileName, { name: copyName }, function() {
105+
if (err) { return done(err); }
106+
bucket.remove(copyName, function(err) {
107+
if (err) { return done(err); }
108+
bucket.remove(fileName, function(err) {
109+
if (err) { return done(err); }
110+
done();
111+
});
112+
});
113+
});
114+
});
115+
});
116+
117+
});
118+
119+
describe('list files', function() {
120+
121+
var filenames = ['CloudLogo1', 'CloudLogo2', 'CloudLogo3'];
122+
123+
before(function(done) {
124+
bucket.write(filenames[0], { filename: pathToLogoFile }, function(err, fileObject) {
125+
if (err) { return done(err); }
126+
bucket.copy(filenames[0], { name: filenames[1] }, function() {
127+
if (err) { return done(err); }
128+
bucket.copy(filenames[0], { name: filenames[2] }, function() {
129+
if (err) { return done(err); }
130+
done();
131+
});
132+
});
133+
});
134+
});
135+
136+
it('should list files', function(done) {
137+
bucket.list(function(err, files, nextQuery) {
138+
if (err) { return done(err); }
139+
assert.equal(files.length, 3);
140+
assert.equal(nextQuery, null);
141+
done();
142+
});
143+
});
144+
145+
it('should paginate the list', function(done) {
146+
bucket.list({ maxResults: 2 }, function(err, files, nextQuery) {
147+
if (err) { return done(err); }
148+
assert.equal(files.length, 2);
149+
assert(nextQuery);
150+
bucket.list(nextQuery, function(err, files, nextQuery) {
151+
if (err) { return done(err); }
152+
assert(files);
153+
done();
154+
});
155+
});
156+
});
157+
158+
after(function(done) {
159+
bucket.remove(filenames[0], function(err) {
160+
if (err) { return done(err); }
161+
bucket.remove(filenames[1], function(err) {
162+
if (err) { return done(err); }
163+
bucket.remove(filenames[2], function() {
164+
if (err) { return done(err); }
165+
done();
166+
});
167+
});
168+
});
169+
});
170+
171+
});
172+
173+
});

0 commit comments

Comments
 (0)