SlideShare una empresa de Scribd logo
1 de 52
The Usual Suspects – Jorge Hidalgo1
The Usual Suspects
Creating a Cloud Development Environment with
Sonar, Selenium and JMeter on OpenShift Origin
Jorge Hidalgo
Senior Technology Architect
Accenture Delivery Centre in Spain – Java Lead
The Usual Suspects – Jorge Hidalgo2
Creating a Cloud Development Environment with Sonar,
Selenium and JMeter on OpenShift Origin
Abstract: OpenShift has already established itself as a great platform to run Java applications (plus
many other technologies) in the Cloud. But OpenShift also offers the foundation for a development
environment, including source control with Git, build automation with Maven and continuous
integration with Jenkins. In this session, we will learn how to extend the basic development
environment and create a more powerful environment on OpenShift featuring “usual suspects”
such as Sonar for continuous quality assurance, Selenium for functional testing, JMeter for
performance/load testing as well as Arquillian for in-container testing. The session includes a live
demo built on OpenShift Origin.
Speaker: Jorge Hidalgo – Senior Technology Architect
Accenture Delivery Centre in Spain – Java Lead
Author of dr. macphail’s trance blog: http://deors.wordpress.com
The Usual Suspects
The Usual Suspects – Jorge Hidalgo3
What is a Development
Environment?
The Usual Suspects
The Usual Suspects – Jorge Hidalgo4
How Cloud Platforms
can be of help?
The Usual Suspects
The Usual Suspects – Jorge Hidalgo5
• Agenda
– Understanding the Basics – Git and Apache Maven
– Continuous Integration with Jenkins
– Continuous Quality Assurance with Sonar
– Functional, Cross-browser Tests with Selenium WebDriver
– Performance/Load Tests with Apache JMeter
– In-Container Tests with Arquillian
– Q & A
The Usual Suspects
The Usual Suspects – Jorge Hidalgo6
00: Understanding the Basics
– Git and Apache Maven
The Usual Suspects – Jorge Hidalgo7
Understanding the Basics
• Each application in OpenShift comes with a Git repository.
– Stores sources, configuration, binaries and scripts.
• Each push action to the repository triggers a new build and
deploy process.
– Details on what means “build and deploy” depends on the
type of application, and can be customised with action hooks.
git push origin master
action hooks for
a DIY app
The Usual Suspects – Jorge Hidalgo8
package integration-test
• For Java applications (jbossas-7 type) builds are managed
with Apache Maven.
– Isolated configuration.
– Isolated local repository.
• Lifecycle standardisation.
Understanding the Basics
action hooks for
a jbossas-7 app
validate compile test
verify install deploy
The Usual Suspects – Jorge Hidalgo9
• We are using Spring Pet Clinic reference application as test
subject.
– Resource redirection fixed to work with Tomcat 7 and JBoss 7
– Added some Selenium and Apache JMeter test scripts
Preparing Pet Clinic
The Usual Suspects – Jorge Hidalgo10
Preparing Pet Clinic
• Create a new JBoss application:
>rhc app create -a petclinic -t jbossas-7
UUID: a74be67eaafb4ced969a279ce3082e03
Git URL: ssh://a74be67eaafb4ced969a279ce3082e03@petclinic-
demo.example.com/~/git/petclinic.git/
Public URL: http://petclinic-demo.example.com/
Command line
The Usual Suspects – Jorge Hidalgo11
Preparing Pet Clinic
• Add MySQL cartridge:
>rhc app cartridge add -a petclinic -c mysql-5.1
Root User: admin
Root Password: Uvvp2ZZ_nBzn
Database Name: petclinic
Connection URL: mysql://127.0.250.129:3306/
Command line
The Usual Suspects – Jorge Hidalgo12
• Merge Pet Clinic sources and configuration.
• Load schema and initial data:
– Connect your favourite database client to the MySQL
cartridge:
• OpenShift: redirect ports with command rhc port-forward.
• Origin: use the client directly in the Origin box.
– Run the scripts at: src/main/resources/db/mysql
• Alternatively:
– Run scripts on app start and disable them next time here:
src/main/resources/applicationContext-dataSource.xml
• Commit and push.
Preparing Pet Clinic
The Usual Suspects – Jorge Hidalgo13
Preparing Pet Clinic
The Usual Suspects – Jorge Hidalgo14
01: Continuous Integration
with Jenkins
The Usual Suspects – Jorge Hidalgo15
Continuous Integration
• OpenShift offers easy configuration of Jenkins, the popular
Continuous Integration engine.
– Jenkins dashboard runs as another application within our
domain. Jenkins consumes one gear.
– For each application managed with Jenkins a especial type of
Java application is created: the builder. Builders consume gears.
• Why add Jenkins?
– Centralized build reports: status, error causes, which version is
deployed, change log, etc.
– Better control to build process, e.g. add code profiling, add
integration tests.
The Usual Suspects – Jorge Hidalgo16
Jenkins Installation and Configuration
• Create a new Jenkins application:
>rhc app create -a jenkins -t jenkins-1.4
UUID: 810197679f614bee8414b0fb701f50fc
Git URL: ssh://810197679f614bee8414b0fb701f50fc@jenkins-
demo.example.com/~/git/jenkins.git/
Public URL: http://jenkins-demo.example.com/
Command line
The Usual Suspects – Jorge Hidalgo17
Jenkins Installation and Configuration
• Add build job (and builder app) for Pet Clinic:
>rhc app cartridge add -a petclinic –c
jenkins-client-1.4
Job URL: https://jenkins-demo.example.com/job/petclinic-
build/
Command line
The Usual Suspects – Jorge Hidalgo18
Jenkins Installation and Configuration
The Usual Suspects – Jorge Hidalgo19
02: Continuous Quality Assurance
with Sonar
The Usual Suspects – Jorge Hidalgo20
Continuous Quality Assurance
• Sonar is a popular code profiler and dashboard that excels
when used along a Continuous Integration engine:
– Seamless integration with Maven.
– Leverages best-of-breed tools as Checkstyle, PMD or FindBugs.
– Configurable quality profiles.
– Re-execution of tests and test code coverage (UT, IT).
– Design Structure Matrix analysis.
– Flexible and highly customisable dashboard.
– Actions plans / peer reviews.
– Historic views / run charts.
– Can be used with Java, .Net, C/C++, Groovy, PHP,...
The Usual Suspects – Jorge Hidalgo21
Sonar Installation and Configuration
• Create a new DIY application:
>rhc app create -a sonar -t diy-0.1
UUID: 4cd9eacb71b34401b81ea712352ffccb
Git URL: ssh://4cd9eacb71b34401b81ea712352ffccb@sonar-
demo.example.com/~/git/sonar.git/
Public URL: http://sonar-demo.example.com/
Command line
The Usual Suspects – Jorge Hidalgo22
Sonar Installation and Configuration
• Add MySQL cartridge:
>rhc app cartridge add -a sonar -c mysql-5.1
Root User: admin
Root Password: VyikSHzlLvjx
Database Name: sonar
Connection URL: mysql://127.0.251.129:3306/
Command line
The Usual Suspects – Jorge Hidalgo23
• Unzip Sonar distribution to app root folder.
• Update conf/sonar.properties with settings for MySQL
cartridge and bind to OpenShift internal IP and port:
sonar.web.host: 127.0.251.129
sonar.web.port: 8080
sonar.web.context: /
sonar.jdbc.username: admin
sonar.jdbc.password: VyikSHzlLvjx
sonar.jdbc.driver: com.mysql.jdbc.Driver
sonar.jdbc.url: jdbc:mysql://127.0.251.129:3306/sonar
?useUnicode=true&characterEncoding=utf8
&rewriteBatchedStatements=true
Sonar Installation and Configuration
File: /sonar/sonar-3.1.1/conf/sonar.properties
The Usual Suspects – Jorge Hidalgo24
• Update action hooks with the appropriate commands to
start and stop Sonar:
#!/bin/bash
cd $OPENSHIFT_REPO_DIR/sonar-3.1.1/bin/linux-x86-64
chmod 755 wrapper
sh ./sonar.sh start
#!/bin/bash
cd $OPENSHIFT_REPO_DIR/sonar-3.1.1/bin/linux-x86-64
sh ./sonar.sh stop
Sonar Installation and Configuration
File: /sonar/.openshift/action_hooks/start
File: /sonar/.openshift/action_hooks/stop
The Usual Suspects – Jorge Hidalgo25
• Add this to Pet Clinic build job to trigger the Sonar analysis
before packaging and deploying the application:
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean test
export SONAR_JDBC="-Dsonar.jdbc.url=jdbc:mysql://127.0.251.129:3306/sonar
?useUnicode=true&characterEncoding=utf8"
export SONAR_DRIVER=-Dsonar.jdbc.driver=com.mysql.jdbc.Driver
export SONAR_DBUSER=-Dsonar.jdbc.username=admin
export SONAR_DBPASS=-Dsonar.jdbc.password=VyikSHzlLvjx
export SONAR_URL=-Dsonar.host.url=http://sonar-demo.example.com
export SONAR_OPTS="$SONAR_JDBC $SONAR_DRIVER $SONAR_DBUSER $SONAR_DBPASS $SONAR_URL"
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR sonar:sonar $SONAR_OPTS
Sonar Installation and Configuration
Jenkins job: petclinic-build
The Usual Suspects – Jorge Hidalgo26
Sonar Installation and Configuration
The Usual Suspects – Jorge Hidalgo27
03: Functional, Cross-browser Tests
with Selenium WebDriver
The Usual Suspects – Jorge Hidalgo28
Functional Tests
• Selenium is a popular framework / tool that allows, for web
based applications, to record, re-execute and distribute
tests across multiple browsers and computers.
– Because Java-only tests may not be enough.
– Can run with HtmlUnit to simulate a real browser (useful to
gather code coverage metrics).
– Can run with local browsers or distributed across computers in
a grid.
– The grid can be hosted in OpenShift, but browsers cannot –
need dedicated machines with a desktop session that will act
as test nodes.
– You can use your Origin box as both hub and test node.
The Usual Suspects – Jorge Hidalgo29
Selenium Grid Hub Installation and Configuration
• Create a new DIY application:
>rhc app create -a seleniumhub -t diy-0.1
UUID: ddd8d0a2182b4b6799ec7c7ce8ae62b8
Git URL: ssh://ddd8d0a2182b4b6799ec7c7ce8ae62b8@
seleniumhub-demo.example.com/~/git/seleniumhub.git/
Public URL: http://seleniumhub-demo.example.com
Command line
The Usual Suspects – Jorge Hidalgo30
File: /seleniumhub/.openshift/action_hooks/start
File: /seleniumhub/.openshift/action_hooks/stop
Selenium Grid Hub Installation and Configuration
• Copy selenium-server-standalone-2.25.0.jar (or other version) to folder
selenium-2.25.0.
• Update action hooks with appropriate commands to start and stop the hub:
#!/bin/bash
nohup java -jar $OPENSHIFT_REPO_DIR/selenium-2.25.0/
selenium-server-standalone-2.25.0.jar -role hub
-host $OPENSHIFT_INTERNAL_IP -port $OPENSHIFT_INTERNAL_PORT
>>$OPENSHIFT_LOG_DIR/seleniumhub.log 2>&1 &
#!/bin/bash
kill `ps -ef | grep selenium | grep -v grep | awk '{ print $2 }'` >
/dev/null 2>&1
exit 0
The Usual Suspects – Jorge Hidalgo31
• Update Maven target in Pet Clinic build job to launch
Selenium tests with HtmlUnit to gather code coverage:
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean test
... Sonar settings ...
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR sonar:sonar $SONAR_OPTS
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean verify
–Pcargo-tomcat,selenium-tests
... Sonar settings ...
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR sonar:sonar $SONAR_OPTS
Selenium Grid Hub Installation and Configuration
Jenkins job: petclinic-build BEFORE
Jenkins job: petclinic-build AFTER
The Usual Suspects – Jorge Hidalgo32
• Add this at the end of Pet Clinic build job to launch Selenium
tests with real browsers once the app is deployed:
export SELENIUM_BROWSERS="-Dtest.run.htmlunit=false
-Dtest.run.firefox=true -Dtest.run.chrome=true"
export SELENIUM_HUB="-Dtest.selenium.hub.url=
http://seleniumhub-demo.example.com/wd/hub"
export SELENIUM_TARGET="-Dtest.target.server.url=
http://petclinic-demo.example.com"
export SELENIUM_OPTS="$SELENIUM_BROWSERS $SELENIUM_HUB $SELENIUM_TARGET"
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR failsafe:integration-test
–Pselenium-tests $SELENIUM_OPTS
Selenium Grid Hub Installation and Configuration
Jenkins job: petclinic-build
The Usual Suspects – Jorge Hidalgo33
• What is the cargo-tomcat Maven profile doing?
– Provisions a Tomcat 7 container before ITs are executed.
– Tomcat runs with JaCoCo agent to gather coverage metrics.
– Stops the Tomcat 7 container after ITs are executed.
– Instead of Tomcat, we could use Glassfish, JBoss, Jetty...
Pet Clinic Advanced Settings
The Usual Suspects – Jorge Hidalgo34
• What is the selenium-tests Maven profile doing?
– Configures Maven’s Failsafe plug-in to execute Selenium
integration tests during Maven’s integration-test phase.
• Tell Sonar where to find JaCoCo report.
Pet Clinic Advanced Settings
The Usual Suspects – Jorge Hidalgo35
• How are we dealing with different configuration for local
and cloud execution?
– By default, assumes local execution (so developers can test within
their IDEs). Local settings also work in CI server.
– Leverage openshift profile to copy configuration files over default
ones when packaging the app for OpenShift.
Pet Clinic Advanced Settings
The Usual Suspects – Jorge Hidalgo36
Selenium in Action
The Usual Suspects – Jorge Hidalgo37
Integration Tests Coverage as Seen by Sonar
The Usual Suspects – Jorge Hidalgo38
04: Performance/Load Tests
with Apache JMeter
The Usual Suspects – Jorge Hidalgo39
Performance/Load Tests
• Performance/Load Tests purpose is to verify application
performance under stress:
– Capable of handling multiple requests at the same time.
– Well designed and implemented for concurrency.
• Adding Load Tests to continuous integration allows for early
detection of concurrency and performance issues.
• Engineers/Architects may define thresholds to prevent
deployments of non performant builds.
The Usual Suspects – Jorge Hidalgo40
Performance/Load Tests
• Apache JMeter is a veteran framework / tool that allows to
record, define and re-execute a wide variety of integration
tests:
– HTTP requests.
– Web Services (SOAP, JAX-RPC) requests.
– And many more.
• JMeter is capable of running tests concurrently using
multiple threads:
– Locally, limited due to the amount of available resources.
– Remotely, using JMeter Server on multiple test nodes (load
injectors).
The Usual Suspects – Jorge Hidalgo41
• Update Maven target in Pet Clinic build job to launch JMeter
tests and save them in a known place for Sonar:
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean verify
-Pcargo-tomcat,selenium-tests
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean verify
-Pcargo-tomcat,selenium-tests,jmeter-tests
Adding JMeter Tests to Jenkins and Sonar
Jenkins job: petclinic-build BEFORE
Jenkins job: petclinic-build AFTER
The Usual Suspects – Jorge Hidalgo42
• What is the jmeter-tests Maven profile doing?
– Configures Maven’s JMeter plug-in to execute JMeter tests
during Maven’s integration-test phase.
• Tell Sonar where to find JMeter report.
Pet Clinic Advanced Settings
The Usual Suspects – Jorge Hidalgo43
JMeter Execution Report as Seen by Sonar
The Usual Suspects – Jorge Hidalgo44
05: In-Container Tests
with Arquillian
The Usual Suspects – Jorge Hidalgo45
In-Container Tests
• There is a gap between ‘strict’ unit tests (method or class
level, in isolation) and functional integration tests (focused
on user interactions).
• Another type of tests, called unit-integration tests or in-
container tests, bridge that gap and help testing application
components:
– Within a container, using the services the container provides.
– Key to properly test features like: AOP transactions, AOP error
handling, CDI bean injection, etc.
The Usual Suspects – Jorge Hidalgo46
In-Container Tests
• Arquillian is a popular in-container test framework, recently
born but with great traction in the community.
• Key features of Arquillian include:
– It’s open and modular – very easy to add extensions and new
features.
– Allows for cross-container tests with the help of Maven
profiles – very convenient if you want to test your components
in multiple containers (Weld, JBoss, Glassfish...).
– Makes all the plumbing for you – prepares deployable units
and puts them into the container of choice, either embedded
(within the same JVM) or not (local / remote containers).
The Usual Suspects – Jorge Hidalgo47
Preparing Arquillian Test Application
• Create a new JBoss application:
>rhc app create -a arqtest -t jbossas-7
UUID: 0690fabf2e3549abb746a911d8087227
Git URL: ssh://0690fabf2e3549abb746a911d8087227@arqtest-
demo.example.com/~/git/arqtest.git/
Public URL: http://arqtest-demo.example.com/
• Merge sources and configuration from test application.
• Using some examples from Arquillian web site.
Command line
The Usual Suspects – Jorge Hidalgo48
Preparing Arquillian Test Application
• Add build job (and builder app) for Arqtest:
>rhc app cartridge add -a arqtest -c jenkins-
client-1.4
Job URL: https://jenkins-demo.example.com/job/arqtest-
build/
Command line
The Usual Suspects – Jorge Hidalgo49
• Add this to Arqtest build job to launch Arquillian tests:
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR --version
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean package –Popenshift
-DskipTests
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR --version
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean test
-Parquillian-glassfish-embedded
mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean package –Popenshift
-DskipTests
• Commit and push.
Preparing Arquillian Test Application
Jenkins job: arqtest-build BEFORE
Jenkins job: arqtest-build AFTER
The Usual Suspects – Jorge Hidalgo50
Running Arqtest Build Job
• Arqtest build job will execute tests with a Glassfish
embedded container:
The Usual Suspects – Jorge Hidalgo51
The Usual Suspects – Wrap up
• Platforms like OpenShift enable development teams to
build and use powerful, best-of-breed development tools.
• Easy access to the best software engineering practices.
• With Origin, you get all the tools you need in the same box.
Deploy it locally or in your in-house infrastructure.
• Excellent for individuals and small development teams...
• ...But if you work in a larger team and want more power,
why not deploy the same in OpenShift?
The Usual Suspects – Jorge Hidalgo52
Q & A

Más contenido relacionado

La actualidad más candente

Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)Kelly Shuster
 
Building Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksBuilding Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksMike Hugo
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Shekhar Gulati
 
Continuous Delivery Applied (AgileDC)
Continuous Delivery Applied (AgileDC)Continuous Delivery Applied (AgileDC)
Continuous Delivery Applied (AgileDC)Mike McGarr
 
Boost your productivity with Scala tooling!
Boost your productivity  with Scala tooling!Boost your productivity  with Scala tooling!
Boost your productivity with Scala tooling!MeriamLachkar1
 
RING 0/-2 ROOKITS : COMPROMISING DEFENSES
 RING 0/-2 ROOKITS : COMPROMISING DEFENSES RING 0/-2 ROOKITS : COMPROMISING DEFENSES
RING 0/-2 ROOKITS : COMPROMISING DEFENSESPriyanka Aash
 
Ring 0/-2 Rootkits: bypassing defenses -- DEF CON 2018 USA
Ring 0/-2 Rootkits: bypassing defenses  -- DEF CON 2018 USARing 0/-2 Rootkits: bypassing defenses  -- DEF CON 2018 USA
Ring 0/-2 Rootkits: bypassing defenses -- DEF CON 2018 USAAlexandre Borges
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 
Synack at AppSec California 2015 - Geolocation Vulnerabilities
Synack at AppSec California 2015 - Geolocation VulnerabilitiesSynack at AppSec California 2015 - Geolocation Vulnerabilities
Synack at AppSec California 2015 - Geolocation VulnerabilitiesSynack
 
Android reverse engineering: understanding third-party applications. OWASP EU...
Android reverse engineering: understanding third-party applications. OWASP EU...Android reverse engineering: understanding third-party applications. OWASP EU...
Android reverse engineering: understanding third-party applications. OWASP EU...Internet Security Auditors
 
Synack at ShmooCon 2015
Synack at ShmooCon 2015Synack at ShmooCon 2015
Synack at ShmooCon 2015Synack
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsGR8Conf
 
AQAvit: Vitality through Testing
AQAvit: Vitality through TestingAQAvit: Vitality through Testing
AQAvit: Vitality through TestingShelley Lambert
 
How to reverse engineer Android applications
How to reverse engineer Android applicationsHow to reverse engineer Android applications
How to reverse engineer Android applicationshubx
 
On Software Release Engineering (Bram Adams)
On Software Release Engineering (Bram Adams)On Software Release Engineering (Bram Adams)
On Software Release Engineering (Bram Adams)Bram Adams
 
Protecting your organization against attacks via the build system
Protecting your organization against attacks via the build systemProtecting your organization against attacks via the build system
Protecting your organization against attacks via the build systemLouis Jacomet
 
Virus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing GatekeeperVirus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing GatekeeperSynack
 

La actualidad más candente (18)

Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
Internal Android Library Management (DroidCon SF 2016, Droidcon Italy 2016)
 
Building Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And TricksBuilding Grails Plugins - Tips And Tricks
Building Grails Plugins - Tips And Tricks
 
Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud Java(ee) mongo db applications in the cloud
Java(ee) mongo db applications in the cloud
 
Reverse Engineering Android Application
Reverse Engineering Android ApplicationReverse Engineering Android Application
Reverse Engineering Android Application
 
Continuous Delivery Applied (AgileDC)
Continuous Delivery Applied (AgileDC)Continuous Delivery Applied (AgileDC)
Continuous Delivery Applied (AgileDC)
 
Boost your productivity with Scala tooling!
Boost your productivity  with Scala tooling!Boost your productivity  with Scala tooling!
Boost your productivity with Scala tooling!
 
RING 0/-2 ROOKITS : COMPROMISING DEFENSES
 RING 0/-2 ROOKITS : COMPROMISING DEFENSES RING 0/-2 ROOKITS : COMPROMISING DEFENSES
RING 0/-2 ROOKITS : COMPROMISING DEFENSES
 
Ring 0/-2 Rootkits: bypassing defenses -- DEF CON 2018 USA
Ring 0/-2 Rootkits: bypassing defenses  -- DEF CON 2018 USARing 0/-2 Rootkits: bypassing defenses  -- DEF CON 2018 USA
Ring 0/-2 Rootkits: bypassing defenses -- DEF CON 2018 USA
 
An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Synack at AppSec California 2015 - Geolocation Vulnerabilities
Synack at AppSec California 2015 - Geolocation VulnerabilitiesSynack at AppSec California 2015 - Geolocation Vulnerabilities
Synack at AppSec California 2015 - Geolocation Vulnerabilities
 
Android reverse engineering: understanding third-party applications. OWASP EU...
Android reverse engineering: understanding third-party applications. OWASP EU...Android reverse engineering: understanding third-party applications. OWASP EU...
Android reverse engineering: understanding third-party applications. OWASP EU...
 
Synack at ShmooCon 2015
Synack at ShmooCon 2015Synack at ShmooCon 2015
Synack at ShmooCon 2015
 
My "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails ProjectsMy "Perfect" Toolchain Setup for Grails Projects
My "Perfect" Toolchain Setup for Grails Projects
 
AQAvit: Vitality through Testing
AQAvit: Vitality through TestingAQAvit: Vitality through Testing
AQAvit: Vitality through Testing
 
How to reverse engineer Android applications
How to reverse engineer Android applicationsHow to reverse engineer Android applications
How to reverse engineer Android applications
 
On Software Release Engineering (Bram Adams)
On Software Release Engineering (Bram Adams)On Software Release Engineering (Bram Adams)
On Software Release Engineering (Bram Adams)
 
Protecting your organization against attacks via the build system
Protecting your organization against attacks via the build systemProtecting your organization against attacks via the build system
Protecting your organization against attacks via the build system
 
Virus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing GatekeeperVirus Bulletin 2015: Exposing Gatekeeper
Virus Bulletin 2015: Exposing Gatekeeper
 

Destacado

The Usual Suspects
The Usual SuspectsThe Usual Suspects
The Usual SuspectsCissnei
 
The usual suspects analysis
The usual suspects analysisThe usual suspects analysis
The usual suspects analysisa2mn
 
Usual suspects
Usual suspectsUsual suspects
Usual suspectskatief987
 
Opening to the Usual Suspects Analysis. (Singer1995)
Opening to the Usual Suspects Analysis. (Singer1995)Opening to the Usual Suspects Analysis. (Singer1995)
Opening to the Usual Suspects Analysis. (Singer1995)ArthurP1
 
The Usual Suspects
The Usual SuspectsThe Usual Suspects
The Usual Suspectstubze_t
 
Narrative Theory on The Usual Suspects
Narrative Theory on The Usual SuspectsNarrative Theory on The Usual Suspects
Narrative Theory on The Usual Suspectstiffanyymchan
 

Destacado (6)

The Usual Suspects
The Usual SuspectsThe Usual Suspects
The Usual Suspects
 
The usual suspects analysis
The usual suspects analysisThe usual suspects analysis
The usual suspects analysis
 
Usual suspects
Usual suspectsUsual suspects
Usual suspects
 
Opening to the Usual Suspects Analysis. (Singer1995)
Opening to the Usual Suspects Analysis. (Singer1995)Opening to the Usual Suspects Analysis. (Singer1995)
Opening to the Usual Suspects Analysis. (Singer1995)
 
The Usual Suspects
The Usual SuspectsThe Usual Suspects
The Usual Suspects
 
Narrative Theory on The Usual Suspects
Narrative Theory on The Usual SuspectsNarrative Theory on The Usual Suspects
Narrative Theory on The Usual Suspects
 

Similar a The Usual Suspects - Red Hat Developer Day 2012-11-01

DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsAmazon Web Services
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersJavan Rasokat
 
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsAmazon Web Services
 
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...OpenWhisk
 
Django simplified : by weever mbakaya
Django simplified : by weever mbakayaDjango simplified : by weever mbakaya
Django simplified : by weever mbakayaMbakaya Kwatukha
 
Creating Scalable JVM/Java Apps on Heroku
Creating Scalable JVM/Java Apps on HerokuCreating Scalable JVM/Java Apps on Heroku
Creating Scalable JVM/Java Apps on HerokuJoe Kutner
 
Modern web application development with java ee 7
Modern web application development with java ee 7Modern web application development with java ee 7
Modern web application development with java ee 7Shekhar Gulati
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"Daniel Bryant
 
Creating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneCreating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneGary Wisniewski
 
Modern application development with oracle cloud sangam17
Modern application development with oracle cloud sangam17Modern application development with oracle cloud sangam17
Modern application development with oracle cloud sangam17Vinay Kumar
 
DevOps Pipeline for Liferay Application
DevOps Pipeline for Liferay ApplicationDevOps Pipeline for Liferay Application
DevOps Pipeline for Liferay ApplicationMaruti Gollapudi
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKWolfgang Weigend
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
 
DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...
DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...
DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...DevOpsDays Riga
 
InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017Mandi Walls
 
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...Amazon Web Services
 

Similar a The Usual Suspects - Red Hat Developer Day 2012-11-01 (20)

CV_RishabhDixit
CV_RishabhDixitCV_RishabhDixit
CV_RishabhDixit
 
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer ToolsDevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
DevOps on AWS: Accelerating Software Delivery with the AWS Developer Tools
 
OWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA TestersOWASP ZAP Workshop for QA Testers
OWASP ZAP Workshop for QA Testers
 
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
 
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
IBM Bluemix OpenWhisk: Serverless Conference 2016, London, UK: The Future of ...
 
Django simplified : by weever mbakaya
Django simplified : by weever mbakayaDjango simplified : by weever mbakaya
Django simplified : by weever mbakaya
 
Creating Scalable JVM/Java Apps on Heroku
Creating Scalable JVM/Java Apps on HerokuCreating Scalable JVM/Java Apps on Heroku
Creating Scalable JVM/Java Apps on Heroku
 
Modern web application development with java ee 7
Modern web application development with java ee 7Modern web application development with java ee 7
Modern web application development with java ee 7
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
 
Agile Software Development & Tools
Agile Software Development & ToolsAgile Software Development & Tools
Agile Software Development & Tools
 
Creating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with ChaperoneCreating Developer-Friendly Docker Containers with Chaperone
Creating Developer-Friendly Docker Containers with Chaperone
 
Maven
MavenMaven
Maven
 
Modern application development with oracle cloud sangam17
Modern application development with oracle cloud sangam17Modern application development with oracle cloud sangam17
Modern application development with oracle cloud sangam17
 
DevOps Pipeline for Liferay Application
DevOps Pipeline for Liferay ApplicationDevOps Pipeline for Liferay Application
DevOps Pipeline for Liferay Application
 
JDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDKJDK 8 and JDK 8 Updates in OpenJDK
JDK 8 and JDK 8 Updates in OpenJDK
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous Integration
 
DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...
DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...
DevOpsDaysRiga 2017: Mandi Walls - Building security into your workflow with ...
 
Mayur_Resume (2) (1)
Mayur_Resume (2) (1)Mayur_Resume (2) (1)
Mayur_Resume (2) (1)
 
InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017InSpec Workflow for DevOpsDays Riga 2017
InSpec Workflow for DevOpsDays Riga 2017
 
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
AWS re:Invent 2016: DevOps on AWS: Accelerating Software Delivery with the AW...
 

Más de Jorge Hidalgo

GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22Jorge Hidalgo
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18Jorge Hidalgo
 
Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Jorge Hidalgo
 
GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28Jorge Hidalgo
 
GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29Jorge Hidalgo
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Jorge Hidalgo
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Jorge Hidalgo
 
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Jorge Hidalgo
 
DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03Jorge Hidalgo
 
Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Jorge Hidalgo
 
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...Jorge Hidalgo
 
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns ReloadedJavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns ReloadedJorge Hidalgo
 
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power ToolsJavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power ToolsJorge Hidalgo
 
All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06Jorge Hidalgo
 
Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Jorge Hidalgo
 
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Jorge Hidalgo
 
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17Jorge Hidalgo
 
OpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesOpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesJorge Hidalgo
 
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJorge Hidalgo
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07Jorge Hidalgo
 

Más de Jorge Hidalgo (20)

GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22GraalVM - MadridJUG 2019-10-22
GraalVM - MadridJUG 2019-10-22
 
GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18GraalVM - OpenSlava 2019-10-18
GraalVM - OpenSlava 2019-10-18
 
Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01Architecture 2020 - eComputing 2019-07-01
Architecture 2020 - eComputing 2019-07-01
 
GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28GraalVM - JBCNConf 2019-05-28
GraalVM - JBCNConf 2019-05-28
 
GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29GraalVM - MálagaJUG 2018-11-29
GraalVM - MálagaJUG 2018-11-29
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Commit Conf 2018)
 
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
Multilanguage Pipelines with Jenkins, Docker and Kubernetes (Oracle Code One ...
 
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
Multilanguage pipelines with Jenkins, Docker and Kubernetes (DevOpsDays Riga ...
 
DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03DevOps Te Cambia la Vida - eComputing 2018-07-03
DevOps Te Cambia la Vida - eComputing 2018-07-03
 
Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02Open Source Power Tools - Opensouthcode 2018-06-02
Open Source Power Tools - Opensouthcode 2018-06-02
 
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
JavaOne 2017 CON3282 - Code Generation with Annotation Processors: State of t...
 
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns ReloadedJavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
JavaOne 2017 CON3276 - Selenium Testing Patterns Reloaded
 
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power ToolsJavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
JavaOne 2017 CON2902 - Java Code Inspection and Testing Power Tools
 
All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06All Your Faces Belong to Us - Opensouthcode 2017-05-06
All Your Faces Belong to Us - Opensouthcode 2017-05-06
 
Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017Por qué DevOps, por qué ahora @ CHAPI 2017
Por qué DevOps, por qué ahora @ CHAPI 2017
 
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
Accenture Liquid Architectures (for Master EMSE UPM-FI - April 2017)
 
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
La JVM y el Internet de las Cosas @ MálagaJUG 2016-11-17
 
OpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java ArchitecturesOpenSlava 2016 - Lightweight Java Architectures
OpenSlava 2016 - Lightweight Java Architectures
 
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A CookbookJavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
JavaOne 2016 - CON3080 - Testing Java Web Applications with Selenium: A Cookbook
 
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07OpenSouthCode 2016  - Accenture DevOps Platform 2016-05-07
OpenSouthCode 2016 - Accenture DevOps Platform 2016-05-07
 

Último

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 

Último (20)

Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

The Usual Suspects - Red Hat Developer Day 2012-11-01

  • 1. The Usual Suspects – Jorge Hidalgo1 The Usual Suspects Creating a Cloud Development Environment with Sonar, Selenium and JMeter on OpenShift Origin Jorge Hidalgo Senior Technology Architect Accenture Delivery Centre in Spain – Java Lead
  • 2. The Usual Suspects – Jorge Hidalgo2 Creating a Cloud Development Environment with Sonar, Selenium and JMeter on OpenShift Origin Abstract: OpenShift has already established itself as a great platform to run Java applications (plus many other technologies) in the Cloud. But OpenShift also offers the foundation for a development environment, including source control with Git, build automation with Maven and continuous integration with Jenkins. In this session, we will learn how to extend the basic development environment and create a more powerful environment on OpenShift featuring “usual suspects” such as Sonar for continuous quality assurance, Selenium for functional testing, JMeter for performance/load testing as well as Arquillian for in-container testing. The session includes a live demo built on OpenShift Origin. Speaker: Jorge Hidalgo – Senior Technology Architect Accenture Delivery Centre in Spain – Java Lead Author of dr. macphail’s trance blog: http://deors.wordpress.com The Usual Suspects
  • 3. The Usual Suspects – Jorge Hidalgo3 What is a Development Environment? The Usual Suspects
  • 4. The Usual Suspects – Jorge Hidalgo4 How Cloud Platforms can be of help? The Usual Suspects
  • 5. The Usual Suspects – Jorge Hidalgo5 • Agenda – Understanding the Basics – Git and Apache Maven – Continuous Integration with Jenkins – Continuous Quality Assurance with Sonar – Functional, Cross-browser Tests with Selenium WebDriver – Performance/Load Tests with Apache JMeter – In-Container Tests with Arquillian – Q & A The Usual Suspects
  • 6. The Usual Suspects – Jorge Hidalgo6 00: Understanding the Basics – Git and Apache Maven
  • 7. The Usual Suspects – Jorge Hidalgo7 Understanding the Basics • Each application in OpenShift comes with a Git repository. – Stores sources, configuration, binaries and scripts. • Each push action to the repository triggers a new build and deploy process. – Details on what means “build and deploy” depends on the type of application, and can be customised with action hooks. git push origin master action hooks for a DIY app
  • 8. The Usual Suspects – Jorge Hidalgo8 package integration-test • For Java applications (jbossas-7 type) builds are managed with Apache Maven. – Isolated configuration. – Isolated local repository. • Lifecycle standardisation. Understanding the Basics action hooks for a jbossas-7 app validate compile test verify install deploy
  • 9. The Usual Suspects – Jorge Hidalgo9 • We are using Spring Pet Clinic reference application as test subject. – Resource redirection fixed to work with Tomcat 7 and JBoss 7 – Added some Selenium and Apache JMeter test scripts Preparing Pet Clinic
  • 10. The Usual Suspects – Jorge Hidalgo10 Preparing Pet Clinic • Create a new JBoss application: >rhc app create -a petclinic -t jbossas-7 UUID: a74be67eaafb4ced969a279ce3082e03 Git URL: ssh://a74be67eaafb4ced969a279ce3082e03@petclinic- demo.example.com/~/git/petclinic.git/ Public URL: http://petclinic-demo.example.com/ Command line
  • 11. The Usual Suspects – Jorge Hidalgo11 Preparing Pet Clinic • Add MySQL cartridge: >rhc app cartridge add -a petclinic -c mysql-5.1 Root User: admin Root Password: Uvvp2ZZ_nBzn Database Name: petclinic Connection URL: mysql://127.0.250.129:3306/ Command line
  • 12. The Usual Suspects – Jorge Hidalgo12 • Merge Pet Clinic sources and configuration. • Load schema and initial data: – Connect your favourite database client to the MySQL cartridge: • OpenShift: redirect ports with command rhc port-forward. • Origin: use the client directly in the Origin box. – Run the scripts at: src/main/resources/db/mysql • Alternatively: – Run scripts on app start and disable them next time here: src/main/resources/applicationContext-dataSource.xml • Commit and push. Preparing Pet Clinic
  • 13. The Usual Suspects – Jorge Hidalgo13 Preparing Pet Clinic
  • 14. The Usual Suspects – Jorge Hidalgo14 01: Continuous Integration with Jenkins
  • 15. The Usual Suspects – Jorge Hidalgo15 Continuous Integration • OpenShift offers easy configuration of Jenkins, the popular Continuous Integration engine. – Jenkins dashboard runs as another application within our domain. Jenkins consumes one gear. – For each application managed with Jenkins a especial type of Java application is created: the builder. Builders consume gears. • Why add Jenkins? – Centralized build reports: status, error causes, which version is deployed, change log, etc. – Better control to build process, e.g. add code profiling, add integration tests.
  • 16. The Usual Suspects – Jorge Hidalgo16 Jenkins Installation and Configuration • Create a new Jenkins application: >rhc app create -a jenkins -t jenkins-1.4 UUID: 810197679f614bee8414b0fb701f50fc Git URL: ssh://810197679f614bee8414b0fb701f50fc@jenkins- demo.example.com/~/git/jenkins.git/ Public URL: http://jenkins-demo.example.com/ Command line
  • 17. The Usual Suspects – Jorge Hidalgo17 Jenkins Installation and Configuration • Add build job (and builder app) for Pet Clinic: >rhc app cartridge add -a petclinic –c jenkins-client-1.4 Job URL: https://jenkins-demo.example.com/job/petclinic- build/ Command line
  • 18. The Usual Suspects – Jorge Hidalgo18 Jenkins Installation and Configuration
  • 19. The Usual Suspects – Jorge Hidalgo19 02: Continuous Quality Assurance with Sonar
  • 20. The Usual Suspects – Jorge Hidalgo20 Continuous Quality Assurance • Sonar is a popular code profiler and dashboard that excels when used along a Continuous Integration engine: – Seamless integration with Maven. – Leverages best-of-breed tools as Checkstyle, PMD or FindBugs. – Configurable quality profiles. – Re-execution of tests and test code coverage (UT, IT). – Design Structure Matrix analysis. – Flexible and highly customisable dashboard. – Actions plans / peer reviews. – Historic views / run charts. – Can be used with Java, .Net, C/C++, Groovy, PHP,...
  • 21. The Usual Suspects – Jorge Hidalgo21 Sonar Installation and Configuration • Create a new DIY application: >rhc app create -a sonar -t diy-0.1 UUID: 4cd9eacb71b34401b81ea712352ffccb Git URL: ssh://4cd9eacb71b34401b81ea712352ffccb@sonar- demo.example.com/~/git/sonar.git/ Public URL: http://sonar-demo.example.com/ Command line
  • 22. The Usual Suspects – Jorge Hidalgo22 Sonar Installation and Configuration • Add MySQL cartridge: >rhc app cartridge add -a sonar -c mysql-5.1 Root User: admin Root Password: VyikSHzlLvjx Database Name: sonar Connection URL: mysql://127.0.251.129:3306/ Command line
  • 23. The Usual Suspects – Jorge Hidalgo23 • Unzip Sonar distribution to app root folder. • Update conf/sonar.properties with settings for MySQL cartridge and bind to OpenShift internal IP and port: sonar.web.host: 127.0.251.129 sonar.web.port: 8080 sonar.web.context: / sonar.jdbc.username: admin sonar.jdbc.password: VyikSHzlLvjx sonar.jdbc.driver: com.mysql.jdbc.Driver sonar.jdbc.url: jdbc:mysql://127.0.251.129:3306/sonar ?useUnicode=true&characterEncoding=utf8 &rewriteBatchedStatements=true Sonar Installation and Configuration File: /sonar/sonar-3.1.1/conf/sonar.properties
  • 24. The Usual Suspects – Jorge Hidalgo24 • Update action hooks with the appropriate commands to start and stop Sonar: #!/bin/bash cd $OPENSHIFT_REPO_DIR/sonar-3.1.1/bin/linux-x86-64 chmod 755 wrapper sh ./sonar.sh start #!/bin/bash cd $OPENSHIFT_REPO_DIR/sonar-3.1.1/bin/linux-x86-64 sh ./sonar.sh stop Sonar Installation and Configuration File: /sonar/.openshift/action_hooks/start File: /sonar/.openshift/action_hooks/stop
  • 25. The Usual Suspects – Jorge Hidalgo25 • Add this to Pet Clinic build job to trigger the Sonar analysis before packaging and deploying the application: mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean test export SONAR_JDBC="-Dsonar.jdbc.url=jdbc:mysql://127.0.251.129:3306/sonar ?useUnicode=true&characterEncoding=utf8" export SONAR_DRIVER=-Dsonar.jdbc.driver=com.mysql.jdbc.Driver export SONAR_DBUSER=-Dsonar.jdbc.username=admin export SONAR_DBPASS=-Dsonar.jdbc.password=VyikSHzlLvjx export SONAR_URL=-Dsonar.host.url=http://sonar-demo.example.com export SONAR_OPTS="$SONAR_JDBC $SONAR_DRIVER $SONAR_DBUSER $SONAR_DBPASS $SONAR_URL" mvn --global-settings $OPENSHIFT_MAVEN_MIRROR sonar:sonar $SONAR_OPTS Sonar Installation and Configuration Jenkins job: petclinic-build
  • 26. The Usual Suspects – Jorge Hidalgo26 Sonar Installation and Configuration
  • 27. The Usual Suspects – Jorge Hidalgo27 03: Functional, Cross-browser Tests with Selenium WebDriver
  • 28. The Usual Suspects – Jorge Hidalgo28 Functional Tests • Selenium is a popular framework / tool that allows, for web based applications, to record, re-execute and distribute tests across multiple browsers and computers. – Because Java-only tests may not be enough. – Can run with HtmlUnit to simulate a real browser (useful to gather code coverage metrics). – Can run with local browsers or distributed across computers in a grid. – The grid can be hosted in OpenShift, but browsers cannot – need dedicated machines with a desktop session that will act as test nodes. – You can use your Origin box as both hub and test node.
  • 29. The Usual Suspects – Jorge Hidalgo29 Selenium Grid Hub Installation and Configuration • Create a new DIY application: >rhc app create -a seleniumhub -t diy-0.1 UUID: ddd8d0a2182b4b6799ec7c7ce8ae62b8 Git URL: ssh://ddd8d0a2182b4b6799ec7c7ce8ae62b8@ seleniumhub-demo.example.com/~/git/seleniumhub.git/ Public URL: http://seleniumhub-demo.example.com Command line
  • 30. The Usual Suspects – Jorge Hidalgo30 File: /seleniumhub/.openshift/action_hooks/start File: /seleniumhub/.openshift/action_hooks/stop Selenium Grid Hub Installation and Configuration • Copy selenium-server-standalone-2.25.0.jar (or other version) to folder selenium-2.25.0. • Update action hooks with appropriate commands to start and stop the hub: #!/bin/bash nohup java -jar $OPENSHIFT_REPO_DIR/selenium-2.25.0/ selenium-server-standalone-2.25.0.jar -role hub -host $OPENSHIFT_INTERNAL_IP -port $OPENSHIFT_INTERNAL_PORT >>$OPENSHIFT_LOG_DIR/seleniumhub.log 2>&1 & #!/bin/bash kill `ps -ef | grep selenium | grep -v grep | awk '{ print $2 }'` > /dev/null 2>&1 exit 0
  • 31. The Usual Suspects – Jorge Hidalgo31 • Update Maven target in Pet Clinic build job to launch Selenium tests with HtmlUnit to gather code coverage: mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean test ... Sonar settings ... mvn --global-settings $OPENSHIFT_MAVEN_MIRROR sonar:sonar $SONAR_OPTS mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean verify –Pcargo-tomcat,selenium-tests ... Sonar settings ... mvn --global-settings $OPENSHIFT_MAVEN_MIRROR sonar:sonar $SONAR_OPTS Selenium Grid Hub Installation and Configuration Jenkins job: petclinic-build BEFORE Jenkins job: petclinic-build AFTER
  • 32. The Usual Suspects – Jorge Hidalgo32 • Add this at the end of Pet Clinic build job to launch Selenium tests with real browsers once the app is deployed: export SELENIUM_BROWSERS="-Dtest.run.htmlunit=false -Dtest.run.firefox=true -Dtest.run.chrome=true" export SELENIUM_HUB="-Dtest.selenium.hub.url= http://seleniumhub-demo.example.com/wd/hub" export SELENIUM_TARGET="-Dtest.target.server.url= http://petclinic-demo.example.com" export SELENIUM_OPTS="$SELENIUM_BROWSERS $SELENIUM_HUB $SELENIUM_TARGET" mvn --global-settings $OPENSHIFT_MAVEN_MIRROR failsafe:integration-test –Pselenium-tests $SELENIUM_OPTS Selenium Grid Hub Installation and Configuration Jenkins job: petclinic-build
  • 33. The Usual Suspects – Jorge Hidalgo33 • What is the cargo-tomcat Maven profile doing? – Provisions a Tomcat 7 container before ITs are executed. – Tomcat runs with JaCoCo agent to gather coverage metrics. – Stops the Tomcat 7 container after ITs are executed. – Instead of Tomcat, we could use Glassfish, JBoss, Jetty... Pet Clinic Advanced Settings
  • 34. The Usual Suspects – Jorge Hidalgo34 • What is the selenium-tests Maven profile doing? – Configures Maven’s Failsafe plug-in to execute Selenium integration tests during Maven’s integration-test phase. • Tell Sonar where to find JaCoCo report. Pet Clinic Advanced Settings
  • 35. The Usual Suspects – Jorge Hidalgo35 • How are we dealing with different configuration for local and cloud execution? – By default, assumes local execution (so developers can test within their IDEs). Local settings also work in CI server. – Leverage openshift profile to copy configuration files over default ones when packaging the app for OpenShift. Pet Clinic Advanced Settings
  • 36. The Usual Suspects – Jorge Hidalgo36 Selenium in Action
  • 37. The Usual Suspects – Jorge Hidalgo37 Integration Tests Coverage as Seen by Sonar
  • 38. The Usual Suspects – Jorge Hidalgo38 04: Performance/Load Tests with Apache JMeter
  • 39. The Usual Suspects – Jorge Hidalgo39 Performance/Load Tests • Performance/Load Tests purpose is to verify application performance under stress: – Capable of handling multiple requests at the same time. – Well designed and implemented for concurrency. • Adding Load Tests to continuous integration allows for early detection of concurrency and performance issues. • Engineers/Architects may define thresholds to prevent deployments of non performant builds.
  • 40. The Usual Suspects – Jorge Hidalgo40 Performance/Load Tests • Apache JMeter is a veteran framework / tool that allows to record, define and re-execute a wide variety of integration tests: – HTTP requests. – Web Services (SOAP, JAX-RPC) requests. – And many more. • JMeter is capable of running tests concurrently using multiple threads: – Locally, limited due to the amount of available resources. – Remotely, using JMeter Server on multiple test nodes (load injectors).
  • 41. The Usual Suspects – Jorge Hidalgo41 • Update Maven target in Pet Clinic build job to launch JMeter tests and save them in a known place for Sonar: mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean verify -Pcargo-tomcat,selenium-tests mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean verify -Pcargo-tomcat,selenium-tests,jmeter-tests Adding JMeter Tests to Jenkins and Sonar Jenkins job: petclinic-build BEFORE Jenkins job: petclinic-build AFTER
  • 42. The Usual Suspects – Jorge Hidalgo42 • What is the jmeter-tests Maven profile doing? – Configures Maven’s JMeter plug-in to execute JMeter tests during Maven’s integration-test phase. • Tell Sonar where to find JMeter report. Pet Clinic Advanced Settings
  • 43. The Usual Suspects – Jorge Hidalgo43 JMeter Execution Report as Seen by Sonar
  • 44. The Usual Suspects – Jorge Hidalgo44 05: In-Container Tests with Arquillian
  • 45. The Usual Suspects – Jorge Hidalgo45 In-Container Tests • There is a gap between ‘strict’ unit tests (method or class level, in isolation) and functional integration tests (focused on user interactions). • Another type of tests, called unit-integration tests or in- container tests, bridge that gap and help testing application components: – Within a container, using the services the container provides. – Key to properly test features like: AOP transactions, AOP error handling, CDI bean injection, etc.
  • 46. The Usual Suspects – Jorge Hidalgo46 In-Container Tests • Arquillian is a popular in-container test framework, recently born but with great traction in the community. • Key features of Arquillian include: – It’s open and modular – very easy to add extensions and new features. – Allows for cross-container tests with the help of Maven profiles – very convenient if you want to test your components in multiple containers (Weld, JBoss, Glassfish...). – Makes all the plumbing for you – prepares deployable units and puts them into the container of choice, either embedded (within the same JVM) or not (local / remote containers).
  • 47. The Usual Suspects – Jorge Hidalgo47 Preparing Arquillian Test Application • Create a new JBoss application: >rhc app create -a arqtest -t jbossas-7 UUID: 0690fabf2e3549abb746a911d8087227 Git URL: ssh://0690fabf2e3549abb746a911d8087227@arqtest- demo.example.com/~/git/arqtest.git/ Public URL: http://arqtest-demo.example.com/ • Merge sources and configuration from test application. • Using some examples from Arquillian web site. Command line
  • 48. The Usual Suspects – Jorge Hidalgo48 Preparing Arquillian Test Application • Add build job (and builder app) for Arqtest: >rhc app cartridge add -a arqtest -c jenkins- client-1.4 Job URL: https://jenkins-demo.example.com/job/arqtest- build/ Command line
  • 49. The Usual Suspects – Jorge Hidalgo49 • Add this to Arqtest build job to launch Arquillian tests: mvn --global-settings $OPENSHIFT_MAVEN_MIRROR --version mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean package –Popenshift -DskipTests mvn --global-settings $OPENSHIFT_MAVEN_MIRROR --version mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean test -Parquillian-glassfish-embedded mvn --global-settings $OPENSHIFT_MAVEN_MIRROR clean package –Popenshift -DskipTests • Commit and push. Preparing Arquillian Test Application Jenkins job: arqtest-build BEFORE Jenkins job: arqtest-build AFTER
  • 50. The Usual Suspects – Jorge Hidalgo50 Running Arqtest Build Job • Arqtest build job will execute tests with a Glassfish embedded container:
  • 51. The Usual Suspects – Jorge Hidalgo51 The Usual Suspects – Wrap up • Platforms like OpenShift enable development teams to build and use powerful, best-of-breed development tools. • Easy access to the best software engineering practices. • With Origin, you get all the tools you need in the same box. Deploy it locally or in your in-house infrastructure. • Excellent for individuals and small development teams... • ...But if you work in a larger team and want more power, why not deploy the same in OpenShift?
  • 52. The Usual Suspects – Jorge Hidalgo52 Q & A