PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

121
Jordan Moldow and Nadeem Ahmad PuppetConf 2016 From Pain To Gain: A Puppet Unit Tes4ng Story

Transcript of PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Page 1: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Jordan Moldow and Nadeem Ahmad PuppetConf 2016

FromPainToGain:APuppetUnitTes4ngStory

Page 2: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Boxisamoderncontentmanagementpla=ormthattransformshoworganiza4onsworkand

collaboratetoachieveresultsfaster.

Page 3: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

WhoWeAre

NadeemProduc'vityEngineering

JordanDesktopEngineering

Page 4: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Unittes4ngmonolithicPuppetrepositories

Page 5: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Orperhapsspaghe6repos

hFps://www.flickr.com/photos/oeuildebarzo/3026845290/MaksBarzo

Page 6: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Unittes4ngmonolithicPuppetrepositories

Page 7: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Characteris8csofspaghe6monoliths

•  Inter-connectedmodules

•  Nospecifica4ons•  Organicgrowth•  Businesslogiceverywhere

Page 8: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Thistalkisnotaunittes8ngtutorial

Page 9: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Puppet @ Box

Agenda

Why unit tesBng?

GeFng started

Making it work

ConBnuous integraBon

1

2

3

4

5

Rolling it out 6

Page 10: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Puppet@BoxImportance and scale

Page 11: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Puppet@Box

8,000+NODES

300+MODULES

200+CHANGESPERWEEK

115AVERAGECOMMITTERSPER

MONTH

Page 12: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

EnsuringPuppetcorrectnessiscri8cal

Page 13: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Whyunittes4ng?Our current tesBng process and how we wanted to improve

Page 14: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ManualPuppettes8ng@Box

~/puppet $ git commit

~/puppet $ git push origin $BRANCH

$ ssh test.server.com

user@test $ sudo puppet agent –-test --environment=$BRANCH

Page 15: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ManualPuppettes8ng@Box

1.  Waitforcatalogtocompile

2.  Waitforno-opruntocomplete

3.  Reviewandacceptno-opresults

4.  WaitforPuppetruntocomplete

5.  Reviewstateofmachine

Running Puppet on a test machine

Page 16: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ManualPuppettes8ng@Box

3:00:00

Time spent by engineers

Page 17: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Otherissueswithmanualmonolithtes8ng

•  Cannotmanuallytesteveryaffectedrole

•  Testsarenoteasilyrepeatable

ModuleM

ModuleCModuleBModuleA

RoleR3RoleR2RoleR1

Cluster1 Cluster2 Cluster3

Page 18: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ApproachestoPuppettes8ng

1.  Manual

2.  Acceptance(Beaker)

3.  Unit/Integra4on

Page 19: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Projectgoals

1.   TestscanbewriPenformostfiles

2.   Testsrunautoma8cally

3.   Testsrunquickly

4.   Testsfailifsomethingisbroken

5.   Failingtestsarereportedtocodereview

6.   Developerswritetestswiththeircode

Page 20: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

GefngstartedFirst experiment with rspec-puppet

Page 21: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Toolsweused

•  puppet(3.6.2)

•  puppetlabs_spec_helper(0.10.2)

•  rspec(3.1.0)–  Rubyspectes4ngframework

•  rspec-puppet(2.3.0)–  Extensiontorspecfortes4ngPuppetmodules

Page 22: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Basictes8ng Rakefile – Command definiBons

Page 23: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Basictes8ng.fixtures.yml –Pointerstoyourmodules

Page 24: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Basictes8ngspec/spec_helper.rb – Configure rspec-puppet

Page 25: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Basictes8ngspec/classes/foo/bar_spec.rb

Page 26: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Runningtests

~/puppet $ rake spec

Runalltestsinadirectory

~/puppet $ rake spec SPEC=spec/classes/foo

Runalltestsinafile

~/puppet $ rake spec SPEC=spec/classes/foo/bar_spec.rb

Runalltests

Page 27: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Runningtests

Page 28: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Basictes8ng

•  Thisworks!•  …onsomesimplemanifests

•  Fortechnicalbenefits,thisneedstoworkonmostmanifests

•  Forculturalchange,itneedstoworkANDbefric4onless

Page 29: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

MakingitworkProblems we encountered and our soluBons to them

Page 30: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

box_spec_helper hSps://github.com/jmoldow/box_spec_helper

Page 31: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Problem#1:Undefinedfacts

•  rspec-puppetinvokesPuppetwithabareminimumoffactsprovided

•  Factvaluesdefaulttoundefinmanifests

•  Manifestswon’tcompileasexpected

Page 32: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Solu8on#1:Defaultfactsspec/spec_helper.rb

Page 33: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Problem#2:DefaultrequiredaPributes

•  ResourcecollectorssefngdefaultaFributes

•  Inproduc4on,execcommandsdon'tneedabsolutepath

•  Buttestswillfailwithoutit

Page 34: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Solu8on#2:site.ppsymlink

•  Allofourglobaldefaultsareinmanifests/site.pp •  Createdsymlinkfromspec/fixtures/manifests/site.pp

Page 35: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Problem#3:Produc8on-onlyfunc8ons

•  Somecustomfunc4onsmayonlyworkinproduc4on,e.g.‒  Queryingaproduc4ondatastore‒  AccessingfilesthatonlyexistonPuppetmasters

•  Anymanifestthatusessuchafunc4oncannotbetested‒  Norcananymanifeststhatincludessuchamanifest

Page 36: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Solu8on#3:Globally-stubbedfunc8ons

•  Produc4on-onlyfunc4onsshouldalwaysbestubbed•  AnytestcanbewriFenwithouttest-specificstubs•  Allotherfunc4ons,classes,typesshouldactastheywouldinprod

Page 37: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Solu8on#3:Globally-stubbedfunc8ons

•  module_pathcanincludemul4pledirectories

•  Customfunc4onscannotberedefined;firstdefini4onwins

•  Addedextratreetofrontofmodule_path •  Addednewmoduleswithredefinedfunc4ons

Stubbing via module paths

Page 38: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 39: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 40: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 41: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 42: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 43: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Globally-stubbedfunc8on-Example

Page 44: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Otherbigenhancements

•  Simpletestauto-generator

•  Accumula4ngfact,paramdefini4onsfrommul4pleblocks‒  Includingsharedcontexts

•  Emula4ngotheropera4ngsystems‒ Wewererestrictedonwhathardwarewecouldruntests

Page 45: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 46: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Con4nuousIntegra4on

Page 47: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

FirstItera8onofCI Define small beta group of Puppet developers

Page 48: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

FirstItera8onofCI Run unit tests for their code reviews, report feedback

Page 49: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

FirstItera8onofCI Run unit tests for their code reviews, report feedback

Page 50: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

FirstItera8onofCI

•  Iterateonframework

•  Encouragebetatesterstoalsowritenewtests

Page 51: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

FirstItera8onofCI

•  Testsuitetakes6-8minutestorun

•  Goal:orderofseconds

Page 52: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

UsingClusterRunnertoRunTestswww.clusterrunner.com

Page 53: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 54: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ClusterRunnerPuppetModule

54

Page 55: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

UnlockingParalleliza8onFind individual test unit

~/puppet $ find spec -name "*_spec.rb"

spec/classes/os_hardening/init_spec.rb spec/classes/rsyslog/init_spec.rb spec/classes/rsyslog/package_spec.rb spec/classes/dashboard/sync_hive_query_runner_spec.rb spec/classes/pod/delivery_pipeline_spec.rb spec/classes/yum/centos_extras_spec.rb spec/classes/dev_env/repo/devtools_for_windows_spec.rb spec/classes/dev_env/repo/devtools_spec.rb spec/classes/snmp/server_spec.rb spec/classes/bind/staging_spec.rb spec/classes/bind/base_spec.rb …

Page 56: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Runningtests

~/puppet $ rake spec

Runalltestsinadirectory

~/puppet $ rake spec SPEC=spec/classes/foo

Runalltestsinafile

~/puppet $ rake spec SPEC=spec/classes/foo/init_spec.rb

Runalltests

Page 57: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

WTF??

Page 58: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

UnlockingParalleliza8onrake spec is actually a combinaBon of three subcommands:

~/puppet $ rake spec_prep

Createsfixturesneededbyalltests

Page 59: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

UnlockingParalleliza8onrake spec is actually a combinaBon of three subcommands:

~/puppet $ rake spec_clean

Deletesalltestfixtures

Page 60: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

UnlockingParalleliza8onrake spec is actually a combinaBon of three subcommands:

~/puppet $ rake spec_standalone

Runstheactualtest(assumestestfixturesarepresent)

Page 61: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

clusterrunner.yaml

Page 62: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Ini8alTime(Serial)FinalTime(Parallel)

420

20TotalTestT

ime(secon

ds)

TestRun8mefor~400PuppetUnitTests

Page 63: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Workflow

$ git push

post-receive

Git hook

GitServer

ClusterRunnerMaster

JenkinsMaster

Page 64: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

BuildStateinJenkins

Page 65: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

RollingItOut

Page 66: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Roadblocks

•  Testresultsneedtobepostedtocodereviewforalldevelopers•  Post-mergetestresultsneedtobeeasilyavailable

Page 67: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box
Page 68: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Conclusion

Page 69: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ProjectGoalsChecklist

ü TestscanbewriPenformostfiles

ü Testsrunautoma8cally

ü Testsrunquicklyü Testsfailifsomethingisbroken

q Failingtestsarereportedtocodereviewq Developerswritetestswiththeircode

Page 70: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Possiblefuturework

•  Contributetorspec-puppet,puppetlabs_spec_helper•  Createstandalonerubygem

hSps://github.com/jmoldow/box_spec_helper

Page 71: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Ques8ons?

•  box_spec_helper ‒  hFps://github.com/jmoldow/box_spec_helper

•  Contact‒  Box

‒  [email protected]‒  opensource.box.com‒  www.box.com/careers/

‒  Nadeem‒  [email protected]‒  github.com/nadeemahmad

‒  Jordan‒  [email protected]‒  github.com/jmoldow

Page 72: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

UsingtheTemplateandGuidelines

•  Refertothisdocumentforrulesandrecommenda4onsforthetreatmentofgraphicelements

•  Alwaysstartanewpresenta4onusingtheBoxcorporatetemplateandmakeeditsfromthere;thiswillensureyoualwayshavethecorrectstyles,colorpaleFeandfontsinuse

•  Forlayoutinspira4on,pleaserefertothekeyslidespresenta4on

Page 73: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ColorandFontThemesHow to Save Themes…

StartbyopeningtheBoxCorporateTemplateandclickingontheDesigntab.

1

Savethecolorsfromthetemplatetoyoursystemby

clickingColorsandCreateNewThemeColorsandsaveasBox.

2

3

Dothesamethingforthetemplatefonts.CreateNewTheme

FontsandsaveasBox.

Page 74: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

BulletSlideTreatment(CalibriRegular24pt)

•  Bulletsaresentencecase(CalibriRegular20pt)‒  Second-linebulletsareCalibri16pt

‒  Third-linebulletsareCalibri14pt

•  Limitthenumberofbulletsonaslide

•  TexthighlightsareCalibriBold,butnotunderlined•  Trynottogobelowtherecommendedfontsizes

Page 75: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

BulletSlideWithSub-8tleTreatment

•  Trytokeepyouruseofbulletslidestoaminimum

•  Becrea4veandthinkvisually•  IfyouneedtosourcesomethingcopyandpastethetextboxattheboFomlesontoyourpage

SubBtle Text Placeholder Title Case (Calibri 20pt)

Source:GrayCalibriRegular10pt

Page 76: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

CenteredBulletSlideTreatment

•  Bulletsaresentencecase(CalibriRegular20pt)‒  Second-linebulletsareCalibri16pt

‒  Third-linebulletsareCalibri14pt

•  Limitthenumberofbulletsonaslide

•  TexthighlightsareCalibriBold,butnotunderlined•  Trynottogobelowtherecommendedfontsizes

Page 77: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

CenteredBulletSlideWithSub-8tleTreatment

•  Trytokeepyouruseofbulletslidestoaminimum

•  Becrea4veandthinkvisually•  IfyouneedtosourcesomethingcopyandpastethetextboxattheboFomlesontoyourpage

SubBtle Text Placeholder Title Case (Calibri 22pt)

Source:GrayCalibriRegular10pt

Page 78: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

SegueSlideTitleGoesHereandCanBeaFewLinesinLengthSubBtle goes here in sentence case

Page 79: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

SegueSlideTitleGoesHereandCanBeaFewLinesinLengthSubBtle goes here in sentence case

Page 80: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

SegueSlideTitleGoesHereandCanBeaFewLinesinLengthSubBtle goes here in sentence case

Page 81: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

SegueSlideTitleGoesHereandCanBeaFewLinesinLengthSubBtle goes here in sentence case

Page 82: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

SegueSlideTitleGoesHereandCanBeaFewLinesinLengthSubBtle goes here in sentence case

Page 83: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

SegueSlideTitleGoesHereandCanBeaFewLinesinLengthSubBtle goes here in sentence case

Page 84: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

SegueSlideTitleGoesHereandCanBeaFewLinesinLengthSubBtle goes here in sentence case

Page 85: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Enter Btle for secBon one here and use sentence case

AgendaSlideDesign

Enter Btle for secBon two here and use sentence case

Enter Btle for secBon three here and use sentence case

Enter Btle for secBon four here and use sentence case

Enter Btle for secBon five here and use sentence case

1

2

3

4

5

Page 86: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Enter Btle for secBon one here and use sentence case

AgendaSlideDesignWithHighlightforEachSec8on

Enter Btle for secBon two here and use sentence case

Enter Btle for secBon three here and use sentence case

Enter Btle for secBon four here and use sentence case

Enter Btle for secBon five here and use sentence case

1

2

3

4

5

Page 87: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Enter Btle for secBon one here and use sentence case

AgendaSlideDesignWithHighlightforEachSec8on

Enter Btle for secBon two here and use sentence case

Enter Btle for secBon three here and use sentence case

Enter Btle for secBon four here and use sentence case

Enter Btle for secBon five here and use sentence case

1

2

3

4

5

Page 88: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Enter Btle for secBon one here and use sentence case

AgendaSlideDesignWithHighlightforEachSec8on

Enter Btle for secBon two here and use sentence case

Enter Btle for secBon three here and use sentence case

Enter Btle for secBon four here and use sentence case

Enter Btle for secBon five here and use sentence case

1

2

3

4

5

Page 89: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Enter Btle for secBon one here and use sentence case

AgendaSlideDesignWithHighlightforEachSec8on

Enter Btle for secBon two here and use sentence case

Enter Btle for secBon three here and use sentence case

Enter Btle for secBon four here and use sentence case

Enter Btle for secBon five here and use sentence case

1

2

3

4

5

Page 90: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Enter Btle for secBon one here and use sentence case

AgendaSlideDesignWithHighlightforEachSec8on

Enter Btle for secBon two here and use sentence case

Enter Btle for secBon three here and use sentence case

Enter Btle for secBon four here and use sentence case

Enter Btle for secBon five here and use sentence case

1

2

3

4

5

Page 91: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Enter4tleforsec4ononehereandusesentencecase

AgendaSlideColorCodingOp8onUse different colors to color code each secBon/segue slide

Enter4tleforsec4ontwohereandusesentencecase

Enter4tleforsec4onthreehereandusesentencecase

Enter4tleforsec4onfourhereandusesentencecase

Enter4tleforsec4onfivehereandusesentencecase

1

2

3

4

5

Page 92: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ChartSlideWithMul8pleColorsSub-Btle or Chart Title Here in Title Case

76

60

4457

65

86

72

0

20

40

60

80

100

Category1

Axis Title Goes Here in Title Case Calibri 16pt

Series 1

Series 2

Series 3

Series 4

Series 5

Series 6

Series 7

Page 93: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ChartSlideWithMul8pleDataBarsWithinEachCategorySub-Btle or Chart Title Here in Title Case

76 7569

88

60 6557

63

4450

6272

0

20

40

60

80

100

Category1 Category2 Category3 Category4

Axis Title Goes Here in Title Case Calibri 16pt

Series1

Series2

Series3

Page 94: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Placeaquotefromsomeonereally,reallyimportantanditcanbeuptothreelines…

AuthorNameHereAuthorTitleand/orDateHere

Page 95: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

HEADERSuppor4ngtextgoeshereunderthenumber

HEADERSuppor4ngtextgoeshereunderthenumber

HEADERSuppor4ngtextgoeshereunderthenumber

2M 15M 7B

BigNumberTreatment

Page 96: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ProcessDiagramTreatmentSee Style Page for More Color OpBons

96

1 2 3 4Suppor4ngtextgoeshereunderthenumber

Suppor4ngtextgoeshereunderthenumber

Suppor4ngtextgoeshereunderthenumber

Suppor4ngtextgoeshereunderthenumber

Page 97: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ProcessDiagramTreatmentYou Can Use the Blue Bar to House Heavy Content

TitleGoesHere•  Onebullet•  Twobullet•  Threebullet

TitleGoesHere•  Onebullet•  Twobullet•  Threebullet

TitleGoesHere•  Onebullet•  Twobullet•  Threebullet

TitleGoesHere•  Onebullet•  Twobullet•  Threebullet

1 2 3 4

Page 98: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

BoxWithBulletTreatment

•  Onebullet•  Twobullet•  Threebullet

•  Onebullet•  Twobullet•  Threebullet

•  Onebullet•  Twobullet•  Threebullet

TitleHere TitleHere TitleHere

Page 99: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

TableLayoutTreatmentSubBtle Text Placeholder Title Case (Calibri 20pt)

Header Header Header Header

TitleOne Informa4on Informa4on Informa4on

TitleTwo Informa4on Informa4on Informa4on

TitleThree Informa4on Informa4on Informa4on

TitleFour Informa4on Informa4on Informa4on

TitleFive Informa4on Informa4on Informa4on

TitleSix Informa4on Informa4on Informa4on

TitleSeven Informa4on Informa4on Informa4on

Page 100: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

BigIdeaGoesHereWithHighlightinCalibriBold(40pt)

Page 101: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Usethisareaforabigidea,makesureyourimagehasenoughclearspace+contrastsoyoucanensurereadability

Page 102: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Youcanusethisareaforatexttreatmentthatsupportsyourchosenimagery

Page 103: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Youcanusethisareaforatexttreatmentthatsupportsyourchosenimagery

Page 104: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Youcanusethisareaforatexttreatmentthatsupportsyourchosenimagery

Page 105: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Youcanusethisareaforatexttreatmentthatsupportsyourchosenimagery

Page 106: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Youcanusethisareaforatexttreatmentthatsupportsyourchosenimagery

Page 107: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Youcanusethisareaforatexttreatmentthatsupportsyourchosenimagery

Page 108: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Youcanusethisareaforatexttreatmentthatsupportsyourchosenimagery

Page 109: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ImageTreatmentWithCap8onLayoutHow to Add Your Own Photos and Crop Properly…

InsertoneofthePicturewithCap4onlayouts.Clickontheiconatthecentertoaddyourimage.

1Yourimagewillpopulatethecontainerbutyouwilllikelyneedtoadjustthecrop.

2Clickontheimageandtheformattabandthenselectcrop.

3

Page 110: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ImageTreatmentWithCap8onLayout(Con8nued)How to Add Your Own Photos and Crop Properly…

Clickonthegrayedoutpor4onoftheimageanddragtothelesorrightun4lyouarehappywiththecrop.

4Clickoutofthecroppedimagetosetitandyourimageisreadytogo.

5

Page 111: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ImageWithBulletsTreatmentInsert Your Own Photo, See Slide 39 for InstrucBons

•  Bullettexthere

•  Somemorebullettext

•  Anothershortbullet

•  Lastbulletgoeshere

Page 112: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

LogoWithBulletsTreatmentInsert Your Chosen Logo to the Lek of the Line

•  Bullettexthere

•  Somemorebullettext

•  Anothershortbullet

•  Lastbulletgoeshere

Page 113: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ImageTreatmentforTwoImagesSub-Btle or Secondary InformaBon Here

Page 114: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ImageTreatmentforThreeImagesSub-Btle or Secondary InformaBon Here

Page 115: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Mul8pleImageTreatmentSub-Btle or Secondary InformaBon Here

Page 116: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

Mul8pleImageTreatmentHow to Insert MulBple Images…

Thislayoutwillappear.Next,clicktheicontoinsertanimage.

Navigatetoyourimageandinsertit.Repeatforalltheimageboxes.Forinstruc4onsonhowtocropyourimageseepage39.

ClicktheNewSlidetabandselectMul4pleImageLayout.

3

2

1

Page 117: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ScreenShotTreatmentWithBrowserWindow

Page 118: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ScreenShotTreatmentWithBrowserWindowHow to Drop in Your Screen Shot…

Thebrowserwindowislikeaframesoanythingyoudropbehinditwillshowthrough.

1

Dropinyourscreenshot,gototheformatmenuandcropittoshowonlywhatyouwant.

2

Last,besuretorightclickonyourscreenshotandsendtobacksoittucksbehindthebrowserwindowframe.

3

Page 119: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

ColorPalePe

Hex# 22A7F0 Hex# 2A62B9 Hex# 2D3D4F Hex# BCC1C7

Hex# 3FB87F Hex# 955CA5 Hex# F7931D Hex# E33D55

Hex# 74808C

Primary

Secondary

Page 120: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

StylesandTreatments

Clickontheselogos/iconsandyoucanrecolorthemwithinPowerPointasneeded.Besuretofollowbrandguidelinesforusageandcolors.

Varioustemplatecolorscanbeusedforshapes.Shapesshouldhavea4ptlinestroke.Gradientlinecanbeusedtoseparatecontentandshouldhavea1ptlinestroke.

Primary

Secondary

Page 121: PuppetConf 2016: Turning Pain Into Gain: A Unit Testing Story – Nadeem Ahmad & Jordan Moldow, Box

VideoinYourPresenta8onHow to Insert Video and Set Your Playback SeFngs…

Toinsertavideoclickinsertonthemenubar

Nextselectvideoandnavigatetoyourvideo.

Onceyourvideoisontheslideandyouclickonit,youwillgetanewmenutab.Youcannowmakechangestoboththeformatandplaybackofyourvideo.

Usethesesefngsforvideoplayback:StartAutoma4cally,PlayFullScreen,andHideWhileNotPlaying.ThiswillensureaconsistentlookwithinallBoxpresenta4ons.

1

2

3

4