View Javadoc
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 }