1 package org.apache.maven.continuum.buildqueue;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.continuum.taskqueue.BuildProjectTask;
23 import org.apache.maven.continuum.AbstractContinuumTest;
24 import org.apache.maven.continuum.model.project.Project;
25 import org.apache.maven.continuum.model.project.ProjectGroup;
26 import org.apache.maven.continuum.project.ContinuumProjectState;
27 import org.codehaus.plexus.taskqueue.Task;
28 import org.codehaus.plexus.taskqueue.TaskQueue;
29
30
31
32
33
34 public class BuildQueueTest
35 extends AbstractContinuumTest
36 {
37 private TaskQueue buildQueue;
38
39 public void setUp()
40 throws Exception
41 {
42 super.setUp();
43
44 buildQueue = (TaskQueue) lookup( TaskQueue.ROLE, "build-project" );
45 }
46
47 public void testTestTheQueueWithASingleProject()
48 throws Exception
49 {
50 Project project = addProject( "Build Queue Project 1" );
51
52 int projectId = project.getId();
53
54 buildProject( projectId, ContinuumProjectState.TRIGGER_SCHEDULED );
55
56 assertNextBuildIs( projectId );
57
58 assertNextBuildIsNull();
59
60 buildProject( projectId, ContinuumProjectState.TRIGGER_SCHEDULED );
61
62 buildProject( projectId, ContinuumProjectState.TRIGGER_SCHEDULED );
63 buildProject( projectId, ContinuumProjectState.TRIGGER_SCHEDULED );
64 buildProject( projectId, ContinuumProjectState.TRIGGER_SCHEDULED );
65 buildProject( projectId, ContinuumProjectState.TRIGGER_SCHEDULED );
66
67 assertNextBuildIs( projectId );
68
69 assertNextBuildIsNull();
70 }
71
72 public void testTheQueueWithMultipleProjects()
73 throws Exception
74 {
75 int projectId1 = addProject( "Build Queue Project 2" ).getId();
76
77 int projectId2 = addProject( "Build Queue Project 3" ).getId();
78
79 buildProject( projectId1, ContinuumProjectState.TRIGGER_SCHEDULED );
80
81 buildProject( projectId2, ContinuumProjectState.TRIGGER_SCHEDULED );
82
83 assertNextBuildIs( projectId1 );
84
85 assertNextBuildIs( projectId2 );
86
87 assertNextBuildIsNull();
88
89 for ( int i = 0; i < 5; i++ )
90 {
91 buildProject( projectId1, ContinuumProjectState.TRIGGER_SCHEDULED );
92 buildProject( projectId2, ContinuumProjectState.TRIGGER_SCHEDULED );
93 }
94
95 assertNextBuildIs( projectId1 );
96 assertNextBuildIs( projectId2 );
97
98 assertNextBuildIsNull();
99 }
100
101 public void testTestTheQueueWithASingleProjectAndForcedBuilds()
102 throws Exception
103 {
104 String name = "Build Queue Project 4";
105
106 int projectId = addProject( name ).getId();
107
108 buildProject( projectId, ContinuumProjectState.TRIGGER_FORCED );
109
110 assertNextBuildIs( projectId );
111
112 assertNextBuildIsNull();
113
114 for ( int i = 0; i < 5; i++ )
115 {
116 buildProject( projectId, ContinuumProjectState.TRIGGER_FORCED );
117 }
118
119 assertNextBuildIs( projectId );
120 assertNextBuildIs( projectId );
121 assertNextBuildIs( projectId );
122 assertNextBuildIs( projectId );
123 assertNextBuildIs( projectId );
124
125 assertNextBuildIsNull();
126 }
127
128
129
130
131
132 private void buildProject( int projectId, int trigger )
133 throws Exception
134 {
135 ProjectGroup group = getDefaultProjectGroup();
136 buildQueue.put( new BuildProjectTask( projectId, 0, trigger, null, null, null, group.getId() ) );
137 }
138
139 private void assertNextBuildIs( int expectedProjectId )
140 throws Exception
141 {
142 Task task = buildQueue.take();
143
144 assertEquals( BuildProjectTask.class.getName(), task.getClass().getName() );
145
146 BuildProjectTask buildProjectTask = (BuildProjectTask) task;
147
148 assertEquals( "Didn't get the expected project id.", expectedProjectId, buildProjectTask.getProjectId() );
149 }
150
151 private void assertNextBuildIsNull()
152 throws Exception
153 {
154 Task task = buildQueue.take();
155
156 if ( task != null )
157 {
158 fail( "Got a non-null build task returned. Project id: " + ( (BuildProjectTask) task ).getProjectId() );
159 }
160 }
161 }