Subversion Repositories DevTools

Rev

Rev 7070 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7070 dpurdie 1
package com.erggroup.buildtool.utf;
2
 
3
 
4
import java.sql.SQLException;
5
import java.util.ArrayList;
6
import java.util.Iterator;
7
 
8
import com.erggroup.buildtool.ripple.BuildFile;
9
import com.erggroup.buildtool.ripple.BuildFile.BuildFileState;
10
import com.erggroup.buildtool.ripple.BuildStandard;
11
import com.erggroup.buildtool.ripple.ReleaseManager;
12
import com.erggroup.buildtool.ripple.Package;
13
import com.erggroup.buildtool.ripple.RippleEngine;
14
import org.slf4j.Logger;
15
import org.slf4j.LoggerFactory;
16
import org.junit.AfterClass;
17
import org.junit.BeforeClass;
18
import org.junit.After;
19
import org.junit.Before;
20
import org.junit.Test;
21
import org.junit.runner.JUnitCore;
22
 
23
import static org.junit.Assert.*;
24
 
25
/**
26
 * container of Build Daemon test methods
27
 */
28
public class DaemonBuildTestCase2
29
{
30
    private static final Logger mLogger = LoggerFactory.getLogger(DaemonBuildTestCase2.class);
31
    myReleaseManager            releaseManager = null;
32
    RippleEngine                rippleEngine   = null;
33
    ArrayList<Package> testPackageCollection   = new ArrayList<Package>();
34
 
35
    /**
36
     * Init the package set
37
     */
38
    public void initTestPackages(String setName)
39
    {
7071 dpurdie 40
 
41
        /*    A basic set of packages
42
         *    All buildable
43
         */
44
         Package  p1 = createPackage(1, setName + "1");
45
         Package  p2 = createPackage(2, setName + "2");
46
         Package  p3 = createPackage(3, setName + "3");
47
         Package  p4 = createPackage(4, setName + "4");
48
         Package  p5 = createPackage(5, setName + "5");
49
         Package  p6 = createPackage(6, setName + "6");
50
         Package  p7 = createPackage(7, setName + "7");
51
 
52
         testPackageCollection.add(p1);
53
         testPackageCollection.add(p2);
54
         testPackageCollection.add(p3);
55
         testPackageCollection.add(p4);
56
         testPackageCollection.add(p5);
57
         testPackageCollection.add(p6);
58
         testPackageCollection.add(p7);
59
 
60
         p2.addDependency(p1);
61
         p3.addDependency(p1);
62
         p4.addDependency(p2).addDependency(p3);
63
         p5.addDependency(p2).addDependency(p4);
64
         p6.addDependency(p3).addDependency(p4);
65
         p7.addDependency(p5).addDependency(p6);
66
 
7070 dpurdie 67
    }
68
 
69
    /** Create a WIP for a package in the Release
70
     * This will mark it as directlyPlanned
71
     * @param newPvId
72
     * @param alias
73
     */
74
    private Package createWip(int newPvId, String alias) {
75
 
76
        Package wip = ReleaseManager.NULL_PACKAGE;
77
 
78
        for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
79
        {
80
            Package p = it.next();
81
 
82
            if ( p.mAlias.compareTo( alias ) == 0 )
83
            {
84
                wip = new Package(newPvId, p);
85
                wip.mDirectlyPlanned = true;
86
                testPackageCollection.add(wip);
87
                break;
88
            }
89
        }
90
        return wip;
91
    }
92
 
7071 dpurdie 93
    /** Create a TEST for a package in the Release
94
     * This will mark it as test package
95
     * @param newPvId <0 - use PVID of the base package
96
     * @param alias
97
     */
98
    private Package createTest(int newPvId, String alias) {
99
 
100
        Package wip = ReleaseManager.NULL_PACKAGE;
101
 
102
        for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
103
        {
104
            Package p = it.next();
105
 
106
            if ( p.mAlias.compareTo( alias ) == 0 )
107
            {
108
                if (newPvId < 0 )
109
                    newPvId = p.mId;
110
                wip = new Package(newPvId, p);
111
                wip.mTestBuildInstruction = 1;
112
                testPackageCollection.add(wip);
113
                break;
114
            }
115
        }
116
        return wip;
117
    }
118
 
119
    /** Create a RippleRequest for a package in the Release
120
     * This will mark it as ripple request
121
     * @param alias
122
     */
123
    private Package requestRipple(String alias) {
124
 
125
        Package wip = ReleaseManager.NULL_PACKAGE;
126
 
127
        for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
128
        {
129
            Package p = it.next();
130
 
131
            if ( p.mAlias.compareTo( alias ) == 0 )
132
            {
133
                wip = new Package(p.mId, p);
134
                wip.mForcedRippleInstruction = 1;
135
                testPackageCollection.add(wip);
136
                break;
137
            }
138
        }
139
        return wip;
140
    }
141
 
7070 dpurdie 142
    /** Create a basic package
143
     * 
144
     */
145
    private Package createPackage(int idx, String pName) {
146
        Package  p = new Package(idx, idx * 100, pName, "1.0.0000", ".cr", pName + ".cr" , "CC::/vob/"+pName+".WIP", 'b', 'P');
147
        BuildStandard bs = new BuildStandard(rippleEngine, "Linux", "Java 1.6");
148
        p.mBuildStandardCollection.add(bs);
7071 dpurdie 149
        p.mBuildTime = 100;
7070 dpurdie 150
        return p;
151
    }
7071 dpurdie 152
 
153
    /** Update build time for a package
154
     * 
155
     *  @param alias
156
     *  @param buildTime - Set a new build time
157
     */
158
    private Package setBuildTime(String alias, int buildTime) {
7070 dpurdie 159
 
7071 dpurdie 160
        Package wip = ReleaseManager.NULL_PACKAGE;
161
 
162
        for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
163
        {
164
            Package p = it.next();
165
 
166
            if ( p.mAlias.compareTo( alias ) == 0 )
167
            {
168
                p.mBuildTime = buildTime;
169
                break;
170
            }
171
        }
172
        return wip;
173
    }
7070 dpurdie 174
 
7071 dpurdie 175
    /** Setup a package so that it will be detected as being rippled
176
     *      Change its pvid so that consumers will see that they need to be rippled
177
     */
178
    private Package ripplePackage(String alias) {
179
 
180
        Package wip = ReleaseManager.NULL_PACKAGE;
181
 
182
        for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
183
        {
184
            Package p = it.next();
185
 
186
            if ( p.mAlias.compareTo( alias ) == 0 )
187
            {
188
                p.mId += 10000;
189
                break;
190
            }
191
        }
192
        return wip;
193
    }
194
 
195
 
7070 dpurdie 196
 
197
    /** Subclass and override key methods so that the test can control
198
     *  the data being used
199
     */
200
    public class myReleaseManager extends ReleaseManagerUtf
201
	{
202
       public myReleaseManager(final String connectionString, final String username, final String password)
203
		{
204
           super(connectionString, username, password);
205
           mLogger.error("Test {}", connectionString);
206
		}
207
 
208
		public myReleaseManager()
209
		{
210
			super();
211
		}
212
 
213
		@Override
214
		public void queryPackageVersions(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
215
		{
216
 
217
		    //    Filter for the packages that are in the release
218
		    for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
219
	        {
220
	            Package p = it.next();
221
	            if (!p.mDirectlyPlanned && p.mTestBuildInstruction == 0 && p.mForcedRippleInstruction == 0)
222
	            {
223
	                p.mIsNotReleased = false;
224
	                packageCollection.add(p);
225
	            }
226
	        }
227
		}
228
 
229
		@Override
230
        public void queryWips(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
231
        {
232
            //    Filter for the packages that are WIPs
233
            for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
234
            {
235
                Package p = it.next();
236
                if (p.mDirectlyPlanned )
237
                {
238
                    p.mIsNotReleased = true;
239
                    p.mDirectlyPlanned = true;
240
                    p.mBuildReason = BuildReason.NewVersion;
241
                    packageCollection.add(p);
242
                }
243
            }
244
 
245
        }
246
 
247
		@Override
248
        public void queryTest(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
249
        {
250
		    //    Filter for the packages that are TEST builds
251
            for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
252
            {
253
    		    Package p = it.next();
254
                if (p.mTestBuildInstruction != 0 )
255
                {
256
                    p.mIsNotReleased = true;
257
                    p.mDirectlyPlanned = false;
258
                    p.mBuildReason = BuildReason.Test;
259
                    packageCollection.add(p);
260
                }
261
            }
262
        }
263
 
264
		@Override
265
        public void queryRipples(RippleEngine rippleEngine, ArrayList<Package> packageCollection, int baseline) throws SQLException, Exception
266
        {
267
		    //    Filter for the packages that are forced Ripples
268
            for (Iterator<Package> it = testPackageCollection.iterator(); it.hasNext(); )
269
            {		    
270
    		    Package p = it.next();
271
                if (p.mForcedRippleInstruction != 0)
272
                {
273
                    p.mIsNotReleased = true;
274
                    p.mDirectlyPlanned = false;
275
                    p.mBuildReason = BuildReason.Ripple;
276
                    p.mBuildTime = 3;
277
                    packageCollection.add(p);
278
                } 
279
            }
280
        }
281
 
282
	}
283
 
284
 
285
    public DaemonBuildTestCase2()
286
    {
287
        mLogger.debug("DaemonBuildTestCase2");
288
    }
289
 
290
    /**
291
     * Test Case main line
292
     */
293
    public static void main(String[] args)
294
    {
295
        mLogger.debug("main");
296
        JUnitCore.main("com.erggroup.buildtool.utf.DaemonBuildTestCase2");
297
    }
298
 
299
    /**
300
     * set up performed prior to any test method
301
     */
302
    @BeforeClass
303
    public static void TestCaseSetUp()
304
    {
305
        mLogger.debug("TestCaseSetUp");
306
    }
307
 
308
    /**
309
     * tear down performed after test methods
310
     */
311
    @AfterClass
312
    public static void TestCaseTearDown()
313
    {
314
        mLogger.debug("TestCaseTearDown");
315
    }
316
 
317
    /**
318
     * set up performed prior to each test method
319
     */
320
    @Before
321
    public void TestSetUp()
322
    {
323
        mLogger.debug("TestSetUp");
324
        System.setProperty("vix.utf.name", "DaemonBuildTestCase2");
325
        Package.mGenericMachtype = "win32";
326
        Package.mGbeDpkg = ".";
327
    }
328
 
329
    /**
330
     * tear down performed after each test method
331
     */
332
    @After
333
    public void TestTearDown()
334
    {
335
        mLogger.debug("TestTearDown");
336
    }
337
 
7071 dpurdie 338
    /** Check the build file contents
339
     *  @param expectedName - Name of the expected output file 
340
     */
341
    private void checkBuildFile(String expectedName) {
342
        boolean rv;
343
        BuildFile buildFile;
344
 
345
        buildFile = rippleEngine.getFirstBuildFileContent();
346
        assertTrue(buildFile != null);
347
        assertTrue(buildFile.state != BuildFileState.Dummy);
348
        assertTrue(buildFile.state != BuildFileState.Empty);
349
 
350
        rv = Utilities.checkBuildfile(buildFile.content, expectedName);
351
        assertTrue(rv);
352
    }
353
 
7070 dpurdie 354
    /**
7071 dpurdie 355
     *  Create a mesh of packages
356
     *  Ripple the one at the bottom
7070 dpurdie 357
     */
358
    @Test
359
    public void TestPlanRelease_1()
360
    {
361
        mLogger.debug("TestPlanRelease - Iteration 1");
362
        System.out.println("TestPlanRelease - Iteration 1");
363
        releaseManager = new myReleaseManager("iteration1", "not used", "not used");
364
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
365
 
366
        try
367
        {
368
            rippleEngine.collectMetaData();
369
 
370
            //  Generate basic test set and then tweak for this test
7071 dpurdie 371
            initTestPackages("p");
7070 dpurdie 372
 
373
            createWip(2000, "p1.cr");
374
            rippleEngine.planRelease(false);
375
        }
376
        catch (Exception e)
377
        {
378
        }
379
 
7071 dpurdie 380
        checkBuildFile("ripple1");
381
 
382
    }
383
 
384
    /**
385
     *  Create a mesh of packages
386
     *  Ripple the one not at the bottom
387
     */
388
    @Test
389
    public void TestPlanRelease_2()
390
    {
391
        mLogger.debug("TestPlanRelease - Iteration 2");
392
        System.out.println("TestPlanRelease - Iteration 2");
393
        releaseManager = new myReleaseManager("iteration2", "not used", "not used");
394
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
395
 
396
        try
397
        {
398
            rippleEngine.collectMetaData();
399
 
400
            //  Generate basic test set and then tweak for this test
401
            initTestPackages("p");
402
 
403
            createWip(2000, "p2.cr");
404
            rippleEngine.planRelease(false);
405
        }
406
        catch (Exception e)
407
        {
408
        }
7070 dpurdie 409
 
7071 dpurdie 410
        checkBuildFile("ripple2");
411
    }
7070 dpurdie 412
 
7071 dpurdie 413
    /**
414
     *  Create two meshes of packages
415
     *  One with a longer build time ( < 20% longer)
416
     *  Create a ripple in both
417
     */
418
    @Test
419
    public void TestPlanRelease_3()
420
    {
421
        mLogger.debug("TestPlanRelease - Iteration 3");
422
        System.out.println("TestPlanRelease - Iteration 3");
423
        releaseManager = new myReleaseManager("iteration3", "not used", "not used");
424
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
7070 dpurdie 425
 
7071 dpurdie 426
        try
427
        {
428
            rippleEngine.collectMetaData();
429
 
430
            //  Generate basic test set and then tweak for this test
431
            initTestPackages("p");
432
            initTestPackages("z");
433
            setBuildTime("z4.cr", 200);
434
 
435
            createWip(2000, "p1.cr");
436
            createWip(2000, "z1.cr");
437
 
438
            rippleEngine.planRelease(false);
439
        }
440
        catch (Exception e)
441
        {
442
        }
443
 
444
        checkBuildFile("ripple3");
7070 dpurdie 445
    }
7071 dpurdie 446
 
447
    /**
448
     *  Create two meshes of packages
449
     *  One with a longer build time ( > 20% longer)
450
     *  Create a ripple in both
451
     */
452
    @Test
453
    public void TestPlanRelease_4()
454
    {
455
        mLogger.debug("TestPlanRelease - Iteration 4");
456
        System.out.println("TestPlanRelease - Iteration 4");
457
        releaseManager = new myReleaseManager("iteration4", "not used", "not used");
458
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
459
 
460
        try
461
        {
462
            rippleEngine.collectMetaData();
463
 
464
            //  Generate basic test set and then tweak for this test
465
            initTestPackages("p");
466
            initTestPackages("z");
467
            setBuildTime("z4.cr", 500);
468
 
469
            createWip(2000, "p1.cr");
470
            createWip(2000, "z1.cr");
471
 
472
            rippleEngine.planRelease(false);
473
        }
474
        catch (Exception e)
475
        {
476
        }
7070 dpurdie 477
 
7071 dpurdie 478
        checkBuildFile("ripple4");
479
    }
7070 dpurdie 480
 
7071 dpurdie 481
    /**
482
     *  Create a mesh of packages
483
     *      Create a test package
484
     *      Create a WIP
485
     *      Test should be built first          
486
     */
487
    @Test
488
    public void TestPlanRelease_5()
489
    {
490
        String tName = "ripple5";
491
        mLogger.debug("TestPlanRelease {}", tName);
492
        System.out.println("TestPlanRelease " + tName);
493
        releaseManager = new myReleaseManager(tName, "not used", "not used");
494
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
495
 
496
        try
497
        {
498
            rippleEngine.collectMetaData();
499
 
500
            //  Generate basic test set and then tweak for this test
501
            initTestPackages("p");
502
 
503
            createWip (2000, "p1.cr");
504
            createTest(3333, "p5.cr");
505
            createTest(-1  , "p4.cr");
506
            rippleEngine.planRelease(false);
507
        }
508
        catch (Exception e)
509
        {
510
        }
7070 dpurdie 511
 
7071 dpurdie 512
        checkBuildFile(tName);
513
    }
514
 
515
    /**
516
     *  Create a mesh of packages
517
     *  Request a ripple (daemon Instruction)
518
     */
519
    @Test
520
    public void TestPlanRelease_6()
521
    {
522
        String tName = "ripple6";
523
        mLogger.debug("TestPlanRelease {}", tName);
524
        System.out.println("TestPlanRelease " + tName);
525
        releaseManager = new myReleaseManager(tName, "not used", "not used");
526
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
527
 
528
        try
529
        {
530
            rippleEngine.collectMetaData();
531
 
532
            //  Generate basic test set and then tweak for this test
533
            initTestPackages("p");
534
 
535
            requestRipple("p5.cr");
536
            rippleEngine.planRelease(false);
537
        }
538
        catch (Exception e)
539
        {
540
        }
541
 
542
        checkBuildFile(tName);
543
    }
544
 
545
    /**
546
     * Create a mesh of packages
547
     * Create a circular dependency
548
     * Create a WIP to 'fix' the circular dependency
549
     */
550
    @Test
551
    public void TestPlanRelease_7()
552
    {
553
        String tName = "ripple7";
554
        mLogger.debug("TestPlanRelease {}", tName);
555
        System.out.println("TestPlanRelease " + tName);
556
        releaseManager = new myReleaseManager(tName, "not used", "not used");
557
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
558
 
559
        try
560
        {
561
            rippleEngine.collectMetaData();
562
 
563
            //  Generate basic test set and then tweak for this test
564
            /*    A basic set of packages
565
             */
566
             Package  p1 = createPackage(1, "p1");
567
             Package  p2 = createPackage(2, "p2");
568
             Package  p3 = createPackage(3, "p3");
569
             Package  p4 = createPackage(4, "p4");
570
 
571
             testPackageCollection.add(p1);
572
             testPackageCollection.add(p2);
573
             testPackageCollection.add(p3);
574
             testPackageCollection.add(p4);
575
 
576
             // Create circular dependency
577
             p2.addDependency(p1);
578
             p3.addDependency(p2);
579
             p4.addDependency(p3);
580
             p1.addDependency(p4);
581
 
582
 
583
             Package  p1fixed = createWip(400, "p1.cr");
584
             p1fixed.resetDependencies();
585
             testPackageCollection.add(p1fixed);
586
 
587
 
588
            rippleEngine.planRelease(false);
589
        }
590
        catch (Exception e)
591
        {
592
        }
593
 
594
        checkBuildFile(tName);
595
    }
596
 
597
    /**
598
     * Create a mesh of packages
599
     * Create a dependencies
600
     * Create a WIP to 'create' a circular dependency
601
     * 
602
     * Should build WIP, then it will have a hissy fit on the next planning session
603
     */
604
    @Test
605
    public void TestPlanRelease_8()
606
    {
607
        String tName = "ripple8";
608
        mLogger.debug("TestPlanRelease {}", tName);
609
        System.out.println("TestPlanRelease " + tName);
610
        releaseManager = new myReleaseManager(tName, "not used", "not used");
611
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
612
 
613
        try
614
        {
615
            rippleEngine.collectMetaData();
616
 
617
            //  Generate basic test set and then tweak for this test
618
            /*    A basic set of packages
619
             */
620
             Package  p1 = createPackage(1, "p1");
621
             Package  p2 = createPackage(2, "p2");
622
             Package  p3 = createPackage(3, "p3");
623
             Package  p4 = createPackage(4, "p4");
624
 
625
             testPackageCollection.add(p1);
626
             testPackageCollection.add(p2);
627
             testPackageCollection.add(p3);
628
             testPackageCollection.add(p4);
629
 
630
             // Create dependency
631
             p2.addDependency(p1);
632
             p3.addDependency(p2);
633
             p4.addDependency(p3);
634
 
635
             Package  p1Broken = createWip(400, "p1.cr");
636
             p1Broken.resetDependencies().addDependency(p4);
637
 
638
            rippleEngine.planRelease(false);
639
        }
640
        catch (Exception e)
641
        {
642
        }
643
 
644
        checkBuildFile(tName);
645
    }
646
 
647
    /**
648
     * Create a WIP that will fail applyPV
649
     *      Expect it to be rejected
650
     *      Expect an email
651
     */
652
    @Test
653
    public void TestPlanRelease_9()
654
    {
655
        String tName = "ripple9";
656
        mLogger.debug("TestPlanRelease {}", tName);
657
        System.out.println("TestPlanRelease " + tName);
658
        releaseManager = new myReleaseManager(tName, "not used", "not used");
659
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
660
 
661
        try
662
        {
663
            rippleEngine.collectMetaData();
664
 
665
            //  Generate basic test set and then tweak for this test
666
            /*    A basic set of packages
667
             */
668
             Package  p1 = createPackage(1, "p1");
669
             Package  p2 = createPackage(2, "p2");
670
             Package  p3 = createPackage(3, "p3");
671
             Package  p4 = createPackage(4, "p4");
672
 
673
             testPackageCollection.add(p1);
674
             testPackageCollection.add(p2);
675
             testPackageCollection.add(p3);
676
             testPackageCollection.add(p4);
677
 
678
             p2.addDependency(p1);
679
 
680
             Package  p1Broken = createWip(400, "p1.cr");
681
             p1Broken.mVersion = "BadVersion";
682
 
683
             // Create a ripple, so we get some output
684
             requestRipple("p4.cr");
685
 
686
            rippleEngine.planRelease(false);
687
        }
688
        catch (Exception e)
689
        {
690
        }
691
 
692
        checkBuildFile(tName);
693
    }
694
 
695
 
696
 
697
 
698
    /**
699
     *  Create a mesh of packages
700
     *  Mark bottom as being rippled
701
     */
702
    @Test
703
    public void TestPlanRelease_99()
704
    {
705
        String tName = "ripple99";
706
        mLogger.debug("TestPlanRelease {}", tName);
707
        System.out.println("TestPlanRelease " + tName);
708
        releaseManager = new myReleaseManager(tName, "not used", "not used");
709
        rippleEngine = new RippleEngine(releaseManager, 11111, true);
710
 
711
        try
712
        {
713
            rippleEngine.collectMetaData();
714
 
715
            //  Generate basic test set and then tweak for this test
716
            initTestPackages("p");
717
 
718
            ripplePackage("p1.cr");
719
            rippleEngine.planRelease(false);
720
        }
721
        catch (Exception e)
722
        {
723
        }
724
 
725
        checkBuildFile(tName);
726
    }
727
 
7070 dpurdie 728
}