1   package org.apache.maven.artifact.repository.metadata;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.artifact.Artifact;
23  import org.apache.maven.artifact.repository.ArtifactRepository;
24  import org.apache.maven.artifact.testutils.MockManager;
25  import org.apache.maven.artifact.testutils.TestFileManager;
26  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
27  import org.easymock.MockControl;
28  
29  import java.io.File;
30  import java.io.IOException;
31  
32  import junit.framework.TestCase;
33  
34  public class AbstractRepositoryMetadataTest
35      extends TestCase
36  {
37  
38      private MockManager mm = new MockManager();
39      private TestFileManager fileManager = new TestFileManager( "AbstractRepositoryMetadataTest.test.", "" );
40  
41      public void tearDown() throws IOException
42      {
43          fileManager.cleanUp();
44      }
45  
46      public void testUpdateRepositoryMetadata_NoVersionTagIfMainVersionIsLATEST()
47          throws IOException, XmlPullParserException
48      {
49          MockAndControlForArtifactRepository local = new MockAndControlForArtifactRepository();
50          MockAndControlForArtifactRepository remote = new MockAndControlForArtifactRepository();
51  
52          File basedir = fileManager.createTempDir();
53  
54          String path = "metadata.xml";
55  
56          Metadata m = new Metadata();
57          m.setVersion( Artifact.LATEST_VERSION );
58  
59          TestRepoMetadata trm = new TestRepoMetadata( m );
60  
61          local.expectGetBasedir( basedir );
62          local.expectPathOfLocalRepositoryMetadata( trm, remote.repository, path );
63  
64          mm.replayAll();
65  
66          trm.updateRepositoryMetadata( local.repository, remote.repository );
67  
68          fileManager.assertFileExistence( basedir, path, true );
69          assertTrue( fileManager.getFileContents( new File( basedir, path ) ).indexOf( "<version>"
70              + Artifact.LATEST_VERSION + "</version>" ) < 0 );
71  
72          mm.verifyAll();
73      }
74  
75      public void testUpdateRepositoryMetadata_NoVersionTagIfVersionIsRELEASE()
76          throws IOException, XmlPullParserException
77      {
78          MockAndControlForArtifactRepository local = new MockAndControlForArtifactRepository();
79          MockAndControlForArtifactRepository remote = new MockAndControlForArtifactRepository();
80  
81          File basedir = fileManager.createTempDir();
82  
83          String path = "metadata.xml";
84  
85          Metadata m = new Metadata();
86          m.setVersion( Artifact.RELEASE_VERSION );
87  
88          TestRepoMetadata trm = new TestRepoMetadata( m );
89  
90          local.expectGetBasedir( basedir );
91          local.expectPathOfLocalRepositoryMetadata( trm, remote.repository, path );
92  
93          mm.replayAll();
94  
95          trm.updateRepositoryMetadata( local.repository, remote.repository );
96  
97          fileManager.assertFileExistence( basedir, path, true );
98          assertTrue( fileManager.getFileContents( new File( basedir, path ) ).indexOf( "<version>"
99              + Artifact.RELEASE_VERSION + "</version>" ) < 0 );
100 
101         mm.verifyAll();
102     }
103 
104     private final class MockAndControlForArtifactRepository
105     {
106         MockControl control;
107 
108         ArtifactRepository repository;
109 
110         public MockAndControlForArtifactRepository()
111         {
112             control = MockControl.createControl( ArtifactRepository.class );
113             mm.add( control );
114 
115             repository = ( ArtifactRepository ) control.getMock();
116         }
117 
118         public void expectPathOfLocalRepositoryMetadata( TestRepoMetadata trm, ArtifactRepository remote, String path )
119         {
120             repository.pathOfLocalRepositoryMetadata( trm, remote );
121             control.setReturnValue( path, MockControl.ONE_OR_MORE );
122         }
123 
124         public void expectGetBasedir( File basedir )
125         {
126             repository.getBasedir();
127             control.setReturnValue( basedir.getAbsolutePath(), MockControl.ONE_OR_MORE );
128         }
129     }
130 
131     private static final class TestRepoMetadata
132         extends AbstractRepositoryMetadata
133     {
134 
135         protected TestRepoMetadata( Metadata metadata )
136         {
137             super( metadata );
138         }
139 
140         public boolean isSnapshot()
141         {
142             return false;
143         }
144 
145         public void setRepository( ArtifactRepository remoteRepository )
146         {
147         }
148 
149         public String getArtifactId()
150         {
151             return null;
152         }
153 
154         public String getBaseVersion()
155         {
156             return null;
157         }
158 
159         public String getGroupId()
160         {
161             return null;
162         }
163 
164         public Object getKey()
165         {
166             return null;
167         }
168 
169         public boolean storedInArtifactVersionDirectory()
170         {
171             return false;
172         }
173 
174         public boolean storedInGroupDirectory()
175         {
176             return false;
177         }
178 
179     }
180 
181 }