@@ -303,15 +303,16 @@ comma separated list of nodes to connect to (e.g. localhost:9300). A transport c
303
303
be created based on that and used for all the before|after test operations, and to extract
304
304
the http addresses of the nodes so that REST requests can be sent to them.
305
305
306
- == Testing scripts
306
+ == Testing packaging
307
307
308
- The simplest way to test scripts and the packaged distributions is to use
309
- Vagrant. You can get started by following there five easy steps:
308
+ The packaging tests use Vagrant virtual machines to verify that installing
309
+ and running elasticsearch distributions works correctly on supported operating systems.
310
+ These tests should really only be run in vagrant vms because they're destructive.
310
311
311
312
. Install Virtual Box and Vagrant.
312
313
313
- . (Optional) Install vagrant-cachier to squeeze a bit more performance out of
314
- the process:
314
+ . (Optional) Install https://github.com/fgrehm/ vagrant-cachier[vagrant-cachier] to squeeze
315
+ a bit more performance out of the process:
315
316
316
317
--------------------------------------
317
318
vagrant plugin install vagrant-cachier
@@ -325,26 +326,39 @@ vagrant plugin install vagrant-cachier
325
326
326
327
. Download and smoke test the VMs with `./gradlew vagrantSmokeTest` or
327
328
`./gradlew -Pvagrant.boxes=all vagrantSmokeTest`. The first time you run this it will
328
- download the base images and provision the boxes and immediately quit. If you
329
- you this again it'll skip the download step.
329
+ download the base images and provision the boxes and immediately quit. Downloading all
330
+ the images may take a long time. After the images are already on your machine, they won't
331
+ be downloaded again unless they have been updated to a new version.
330
332
331
333
. Run the tests with `./gradlew packagingTest`. This will cause Gradle to build
332
334
the tar, zip, and deb packages and all the plugins. It will then run the tests
333
335
on ubuntu-1404 and centos-7. We chose those two distributions as the default
334
336
because they cover deb and rpm packaging and SyvVinit and systemd.
335
337
336
- You can run on all the VMs by running `./gradlew -Pvagrant.boxes=all
337
- packagingTest`. You can run a particular VM with a command like `./gradlew
338
- -Pvagrant.boxes=oel-7 packagingTest`. See `./gradlew tasks` for a complete list
339
- of available vagrant boxes for testing. It's important to know that if you
340
- interrupt any of these Gradle commands then the boxes will remain running and
341
- you'll have to terminate them with `./gradlew stop`.
338
+ You can choose which boxes to test by setting the `-Pvagrant.boxes` project property. All of
339
+ the valid options for this property are:
340
+
341
+ * `sample` - The default, only chooses ubuntu-1404 and centos-7
342
+ * List of box names, comma separated (e.g. `oel-7,fedora-26`) - Chooses exactly the boxes listed.
343
+ * `linux-all` - All linux boxes.
344
+ * `windows-all` - All Windows boxes. If there are any Windows boxes which do not
345
+ have images available when this value is provided, the build will fail.
346
+ * `all` - All boxes we test. If there are any boxes (e.g. Windows) which do not have images
347
+ available when this value is provided, the build will fail.
348
+
349
+ For a complete list of boxes on which tests can be run, run `./gradlew :qa:vagrant:listAllBoxes`.
350
+ For a list of boxes that have images available from your configuration, run
351
+ `./gradlew :qa:vagrant:listAvailableBoxes`
352
+
353
+ Note that if you interrupt gradle in the middle of running these tasks, any boxes started
354
+ will remain running and you'll have to stop them manually with `./gradlew stop` or
355
+ `vagrant halt`.
342
356
343
357
All the regular vagrant commands should just work so you can get a shell in a
344
358
VM running trusty by running
345
359
`vagrant up ubuntu-1404 --provider virtualbox && vagrant ssh ubuntu-1404`.
346
360
347
- These are the linux flavors the Vagrantfile currently supports:
361
+ These are the linux flavors supported, all of which we provide images for
348
362
349
363
* ubuntu-1404 aka trusty
350
364
* ubuntu-1604 aka xenial
@@ -364,9 +378,42 @@ quality boxes available in vagrant atlas:
364
378
365
379
* sles-11
366
380
367
- We're missing the following because our tests are very linux/bash centric:
381
+ === Testing packaging on Windows
382
+
383
+ The packaging tests also support Windows Server 2012R2 and Windows Server 2016.
384
+ Unfortunately we're not able to provide boxes for them in open source use
385
+ because of licensing issues. Any Virtualbox image that has WinRM and Powershell
386
+ enabled for remote users should work.
387
+
388
+ Testing on Windows requires the https://github.com/criteo/vagrant-winrm[vagrant-winrm] plugin.
389
+
390
+ ------------------------------------
391
+ vagrant plugin install vagrant-winrm
392
+ ------------------------------------
393
+
394
+ Specify the image IDs of the Windows boxes to gradle with the following project
395
+ properties. They can be set in `~/.gradle/gradle.properties` like
368
396
369
- * Windows Server 2012
397
+ ------------------------------------
398
+ vagrant.windows-2012r2.id=my-image-id
399
+ vagrant.windows-2016.id=another-image-id
400
+ ------------------------------------
401
+
402
+ or passed on the command line like `-Pvagrant.windows-2012r2.id=my-image-id`
403
+ `-Pvagrant.windows-2016=another-image-id`
404
+
405
+ These properties are required for Windows support in all gradle tasks that
406
+ handle packaging tests. Either or both may be specified. Remember that to run tests
407
+ on these boxes, the project property `vagrant.boxes` still needs to be set to a
408
+ value that will include them.
409
+
410
+ If you're running vagrant commands outside of gradle, specify the Windows boxes
411
+ with the environment variables
412
+
413
+ * `VAGRANT_WINDOWS_2012R2_BOX`
414
+ * `VAGRANT_WINDOWS_2016_BOX`
415
+
416
+ === Testing VMs are disposable
370
417
371
418
It's important to think of VMs like cattle. If they become lame you just shoot
372
419
them and let vagrant reprovision them. Say you've hosed your precise VM:
@@ -399,54 +446,62 @@ vagrant destroy -f
399
446
`vagrant up` would normally start all the VMs but we've prevented that because
400
447
that'd consume a ton of ram.
401
448
402
- == Testing scripts more directly
449
+ === Iterating on packaging tests
403
450
404
- In general its best to stick to testing in vagrant because the bats scripts are
405
- destructive. When working with a single package it's generally faster to run its
406
- tests in a tighter loop than Gradle provides. In one window:
451
+ Running the packaging tests through gradle can take a while because it will start
452
+ and stop the VM each time. You can iterate faster by keeping the VM up and running
453
+ the tests directly.
407
454
408
- --------------------------------
409
- ./gradlew :distribution:packages:rpm:assemble
410
- --------------------------------
455
+ The packaging tests use a random seed to determine which past version to use for
456
+ testing upgrades. To use a single past version fix the test seed when running
457
+ the commands below (see <<Seed and repetitions.>>)
411
458
412
- and in another window:
459
+ First build the packaging tests and their dependencies
413
460
414
- ----------------------------------------------------
415
- vagrant up centos-7 --provider virtualbox && vagrant ssh centos-7
416
- cd $PACKAGING_ARCHIVES
417
- sudo -E bats $BATS_TESTS/*rpm*.bats
418
- ----------------------------------------------------
461
+ --------------------------------------------
462
+ ./gradlew :qa:vagrant:setupPackagingTest
463
+ --------------------------------------------
419
464
420
- If you wanted to retest all the release artifacts on a single VM you could:
465
+ Then choose the VM you want to test on and bring it up. For example, to bring
466
+ up Debian 9 use the gradle command below. Bringing the box up with vagrant directly
467
+ may not mount the packaging test project in the right place. Once the VM is up, ssh
468
+ into it
421
469
422
- -------------------------------------------------
423
- ./gradlew setupPackagingTest
424
- cd qa/vagrant; vagrant up ubuntu-1404 --provider virtualbox && vagrant ssh ubuntu-1404
470
+ --------------------------------------------
471
+ ./gradlew :qa:vagrant:vagrantDebian9#up
472
+ vagrant ssh debian-9
473
+ --------------------------------------------
474
+
475
+ Now inside the VM, to run the https://github.com/sstephenson/bats[bats] packaging tests
476
+
477
+ --------------------------------------------
425
478
cd $PACKAGING_ARCHIVES
426
- sudo -E bats $BATS_TESTS/*.bats
427
- -------------------------------------------------
428
479
429
- You can also use Gradle to prepare the test environment and then starts a single VM:
480
+ # runs all bats tests
481
+ sudo bats $BATS_TESTS/*.bats
430
482
431
- -------------------------------------------------
432
- ./gradlew vagrantFedora27#up
433
- -------------------------------------------------
483
+ # you can also pass specific test files
484
+ sudo bats $BATS_TESTS/20_tar_package.bats $BATS_TESTS/25_tar_plugins.bats
485
+ --------------------------------------------
434
486
435
- Or any of vagrantCentos6#up, vagrantCentos7#up, vagrantDebian8#up,
436
- vagrantDebian9#up, vagrantFedora26#up, vagrantFedora27#up, vagrantOel6#up, vagrantOel7#up,
437
- vagrantOpensuse42#up,vagrantSles12#up, vagrantUbuntu1404#up, vagrantUbuntu1604#up.
487
+ To run the Java packaging tests, again inside the VM
438
488
439
- Once up, you can then connect to the VM using SSH from the elasticsearch directory:
489
+ --------------------------------------------
490
+ bash $PACKAGING_TESTS/run-tests.sh
491
+ --------------------------------------------
440
492
441
- -------------------------------------------------
442
- vagrant ssh fedora-27
443
- -------------------------------------------------
493
+ or on Windows
444
494
445
- Or from another directory:
495
+ --------------------------------------------
496
+ powershell -File $Env:PACKAGING_TESTS/run-tests.ps1
497
+ --------------------------------------------
446
498
447
- -------------------------------------------------
448
- VAGRANT_CWD=/path/to/elasticsearch vagrant ssh fedora-27
449
- -------------------------------------------------
499
+ When you've made changes you want to test, keep the VM up and reload the tests and
500
+ distributions inside by running (on the host)
501
+
502
+ --------------------------------------------
503
+ ./gradlew :qa:vagrant:clean :qa:vagrant:setupPackagingTest
504
+ --------------------------------------------
450
505
451
506
Note: Starting vagrant VM outside of the elasticsearch folder requires to
452
507
indicates the folder that contains the Vagrantfile using the VAGRANT_CWD
0 commit comments