1 package org.apache.maven.scm.provider.accurev.command;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import static org.hamcrest.Matchers.containsString;
17 import static org.hamcrest.Matchers.is;
18 import static org.hamcrest.Matchers.lessThan;
19 import static org.hamcrest.Matchers.not;
20 import static org.hamcrest.Matchers.notNullValue;
21 import static org.junit.Assert.assertThat;
22
23 import java.io.File;
24 import java.util.ArrayList;
25 import java.util.List;
26
27 import org.apache.maven.scm.ScmTestCase;
28 import org.apache.maven.scm.log.DefaultLog;
29 import org.apache.maven.scm.log.ScmLogger;
30 import org.apache.maven.scm.provider.accurev.AccuRevInfo;
31 import org.apache.maven.scm.provider.accurev.AccuRevScmProvider;
32 import org.apache.maven.scm.provider.accurev.AccuRevScmProviderRepository;
33 import org.apache.maven.scm.provider.accurev.cli.AccuRevCommandLine;
34 import org.apache.maven.scm.provider.accurev.cli.AccuRevJUnitUtil;
35 import org.codehaus.plexus.PlexusContainer;
36 import org.codehaus.plexus.util.StringUtils;
37
38 public class AccuRevTckUtil
39 {
40
41 private String depotName = null;
42
43 private AccuRevCommandLine accurevCL;
44
45 private AccuRevInfo info;
46
47 private String url;
48
49 private ScmLogger logger;
50
51 private String tckBaseDir;
52
53 private String workingStream;
54
55 public static String getSystemProperty( String name, String defaultValue )
56 {
57 String mavenProperty = "${" + name + "}";
58 String result = System.getProperty( name, mavenProperty );
59 if ( mavenProperty.equals( result ) )
60 {
61 result = defaultValue;
62 }
63 return result;
64 }
65
66 public String getScmUrl()
67 throws Exception
68 {
69 if ( url == null )
70 {
71
72
73
74
75 String tckUrlPrefix = getSystemProperty( "tckUrlPrefix", "" );
76
77 if ( StringUtils.isBlank( tckUrlPrefix ) )
78 {
79 assertThat( "Property \"tckUrlPrefix\" is not set."
80 + " To enable tck tests against an externally logged in accurev session,"
81 + " please set property \"tckAllowImpliedLogin\" to \"true\"",
82 getSystemProperty( "tckAllowImpliedLogin", "false" ), is( "true" ) );
83 }
84 else
85 {
86 assertThat( "tckUrlPrefix must of the form [[user[/pass]]@host[:port]", tckUrlPrefix,
87 containsString( "@" ) );
88 }
89
90 url = "scm:accurev:" + tckUrlPrefix + ":" + getWorkingStream() + ":?tagFormat='" + getDepotName() + "_%s'";
91
92 getLogger().debug( "Using scmURL=" + url );
93 }
94
95 return url;
96
97 }
98
99 private void setLogger( PlexusContainer plexusContainer )
100 throws Exception
101 {
102 this.logger = AccuRevJUnitUtil.getLogger( plexusContainer );
103 }
104
105 public void initRepo( PlexusContainer container )
106 throws Exception
107 {
108 setLogger( container );
109 initRepo();
110 }
111
112 private void initRepo()
113 throws Exception
114 {
115
116 assertLoggedInOK();
117
118 assertThat( "Can't execute TckTests in an accurev workspace, please set 'tckBaseDir' property",
119 getAccuRevInfo().isWorkSpace(), is( false ) );
120
121 File initDir = ScmTestCase.getTestFile( getTckBaseDir(), "target/" + getDepotName() + "/init" );
122
123 assertThat( "AccuRev workspace path limit of 127 characters execeeded, please set 'tckBaseDir' property",
124 initDir.getAbsolutePath().length(), lessThan( 127 ) );
125
126 getAccuRevCL().mkdepot( getDepotName() );
127
128 String newStreamName = getWorkingStream();
129
130 getAccuRevCL().mkstream( getDepotName(), newStreamName );
131
132
133
134
135
136
137
138 List<String> scmFileNames = new ArrayList<String>( 4 );
139 scmFileNames.add( "/pom.xml" );
140 scmFileNames.add( "/readme.txt" );
141 scmFileNames.add( "/src/main/java/Application.java" );
142 scmFileNames.add( "/src/test/java/Test.java" );
143
144 for ( String filename : scmFileNames )
145 {
146 ScmTestCase.makeFile( initDir, filename, filename );
147 }
148
149 String initWorkSpace = getDepotName() + "_initRepo";
150 getAccuRevCL().mkws( newStreamName, initWorkSpace, initDir );
151
152 getAccuRevCL().add( initDir, null, "initial version" );
153 getAccuRevCL().promoteAll( initDir, "initial version" );
154
155 getAccuRevCL().rmws( initWorkSpace + "_" + getAccuRevInfo().getUser() );
156 }
157
158 public String getWorkingStream()
159 {
160 if ( workingStream == null )
161 {
162 workingStream = getDepotName() + "_tckTests";
163 }
164 return workingStream;
165 }
166
167 private String getTckBaseDir()
168 {
169 if ( tckBaseDir == null )
170 {
171 tckBaseDir = getSystemProperty( "tckBaseDir", "" );
172 if ( StringUtils.isBlank( tckBaseDir ) )
173 {
174 tckBaseDir = ScmTestCase.getBasedir();
175 }
176 getLogger().debug( "tckBaseDir=" + tckBaseDir );
177 }
178
179 return tckBaseDir;
180 }
181
182 private void assertLoggedInOK()
183 throws Exception
184 {
185
186 assertThat( getAccuRevInfo().getUser(), notNullValue() );
187 assertThat( getAccuRevInfo().getUser(), is( not( "(not logged in)" ) ) );
188 }
189
190 public void tearDown()
191 throws Exception
192 {
193
194 }
195
196 public String getDepotName()
197 {
198 if ( depotName == null )
199 {
200 depotName = "mvnscm_" + ( System.currentTimeMillis() / 1000 );
201 }
202 return depotName;
203 }
204
205 public ScmLogger getLogger()
206 {
207 if ( logger == null )
208 {
209 logger = new DefaultLog();
210 }
211
212 return logger;
213 }
214
215 public AccuRevCommandLine getAccuRevCL()
216 throws Exception
217 {
218 if ( accurevCL == null )
219 {
220 AccuRevScmProvider provider = new AccuRevScmProvider();
221 provider.addListener( getLogger() );
222 AccuRevScmProviderRepository repo =
223 (AccuRevScmProviderRepository) provider.makeProviderScmRepository( getScmUrl(), ':' );
224 getLogger().debug( repo.toString() );
225 accurevCL = (AccuRevCommandLine) repo.getAccuRev();
226
227 if ( !StringUtils.isEmpty( repo.getUser() ) )
228 {
229 accurevCL.login( repo.getUser(), repo.getPassword() );
230 }
231
232 }
233
234 return accurevCL;
235 }
236
237 public void removeWorkSpace( File basedir )
238 throws Exception
239 {
240 try
241 {
242 assertLoggedInOK();
243 }
244 catch ( AssertionError e )
245 {
246 return;
247 }
248 if ( basedir.exists() )
249 {
250 AccuRevInfo bdInfo = accurevCL.info( basedir );
251 if ( bdInfo.isWorkSpaceTop() )
252 {
253 accurevCL.promoteAll( basedir, "clear default group" );
254 accurevCL.rmws( bdInfo.getWorkSpace() );
255 }
256 }
257 }
258
259 public AccuRevInfo getAccuRevInfo()
260 throws Exception
261 {
262 if ( info == null )
263 {
264 File basedir = new File( getTckBaseDir() );
265 info = getAccuRevCL().info( basedir );
266 }
267
268 return info;
269
270 }
271
272
273
274
275
276 public File getWorkingCopy()
277 {
278 return ScmTestCase.getTestFile( getTckBaseDir(), "target/" + getDepotName() + "/co" );
279 }
280
281 public File getAssertionCopy()
282 {
283 return ScmTestCase.getTestFile( getTckBaseDir(), "target/" + getDepotName() + "/as" );
284 }
285
286 public File getUpdatingCopy()
287 {
288 return ScmTestCase.getTestFile( getTckBaseDir(), "target/" + getDepotName() + "/up" );
289 }
290 }