1 /**
2 * Copyright (c) 2012-2014, jcabi.com
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met: 1) Redistributions of source code must retain the above
8 * copyright notice, this list of conditions and the following
9 * disclaimer. 2) Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution. 3) Neither the name of the jcabi.com nor
13 * the names of its contributors may be used to endorse or promote
14 * products derived from this software without specific prior written
15 * permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 package com.jcabi.beanstalk.maven.plugin;
31
32 import com.amazonaws.services.s3.AmazonS3;
33 import com.amazonaws.services.s3.model.ListObjectsRequest;
34 import com.amazonaws.services.s3.model.ObjectListing;
35 import com.amazonaws.services.s3.model.PutObjectResult;
36 import java.io.File;
37 import org.apache.commons.io.FileUtils;
38 import org.hamcrest.MatcherAssert;
39 import org.hamcrest.Matchers;
40 import org.junit.Rule;
41 import org.junit.Test;
42 import org.junit.rules.TemporaryFolder;
43 import org.mockito.Mockito;
44
45 /**
46 * Test case for {@link OverridingBundle}.
47 * @author Yegor Bugayenko (yegor@tpc2.com)
48 * @version $Id$
49 */
50 public final class OverridingBundleTest {
51
52 /**
53 * Temporary folder.
54 * @checkstyle VisibilityModifier (3 lines)
55 */
56 @Rule
57 public transient TemporaryFolder temp = new TemporaryFolder();
58
59 /**
60 * OverridingBundle can override a file in AWS S3.
61 * @throws Exception If something is wrong
62 */
63 @Test
64 public void overridesFileInAws() throws Exception {
65 final String bucket = "some-bucket";
66 final String key = "some-key";
67 final File war = this.temp.newFile("temp.war");
68 FileUtils.writeStringToFile(war, "broken JAR file content");
69 final AmazonS3 client = Mockito.mock(AmazonS3.class);
70 Mockito.doReturn(new PutObjectResult())
71 .when(client).putObject(bucket, key, war);
72 Mockito.doReturn(new ObjectListing())
73 .when(client).listObjects(Mockito.any(ListObjectsRequest.class));
74 final Bundle bundle = new OverridingBundle(client, bucket, key, war);
75 MatcherAssert.assertThat(
76 bundle.name(),
77 Matchers.equalTo(key)
78 );
79 MatcherAssert.assertThat(
80 bundle.location().getS3Key(),
81 Matchers.equalTo(key)
82 );
83 }
84
85 /**
86 * OverridingBundle caches result of location() method.
87 * @throws Exception If something is wrong
88 */
89 @Test
90 public void cachesResultOfLocation() throws Exception {
91 final AmazonS3 client = Mockito.mock(AmazonS3.class);
92 final File war = this.temp.newFile("temp1.war");
93 FileUtils.writeStringToFile(war, "some JAR file content");
94 final String bucket = "some-bucket-for-cache";
95 final String key = "some-key-for-cache";
96 Mockito.doReturn(new PutObjectResult())
97 .when(client).putObject(bucket, key, war);
98 Mockito.doReturn(new ObjectListing())
99 .when(client).listObjects(Mockito.any(ListObjectsRequest.class));
100 final Bundle bundle = new OverridingBundle(client, bucket, key, war);
101 bundle.location();
102 bundle.location();
103 Mockito.verify(client, Mockito.times(1)).putObject(bucket, key, war);
104 }
105 }