SlideShare une entreprise Scribd logo
1  sur  69
@burythehammer
MATT LONG
TESTING PROGRAMMABLE
INFRASTRUCTURE (WITH RUBY)
InfoQ.com: News & Community Site
Watch the video with slide
synchronization on InfoQ.com!
https://www.infoq.com/presentations
/opencredo-ruby
• Over 1,000,000 software developers, architects and CTOs read the site world-
wide every month
• 250,000 senior developers subscribe to our weekly newsletter
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• 2 dedicated podcast channels: The InfoQ Podcast, with a focus on
Architecture and The Engineering Culture Podcast, with a focus on building
• 96 deep dives on innovative topics packed as downloadable emags and
minibooks
• Over 40 new content items per week
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon London
www.qconlondon.com
@burythehammer
PROGRAMMABLE
INFRASTRUCTURE IS GREAT, BUT
WE'RE MISSING SOMETHING.
TESTING.
@burythehammer
I'M A TESTER
HELLO, I'M MATT
@burythehammer
@burythehammer
I WORK HERE ↑
@burythehammer
I AM NOT A
SYSADMIN
@burythehammer
WHAT IS
PROGRAMMABLE
INFRASTRUCTURE?
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
THE APPLICATION OF METHODS AND TOOLING
FROM SOFTWARE DEVELOPMENT TO THE
MANAGEMENT OF IT INFRASTRUCTURE
PROGRAMMABLE INFRASTRUCTURE IS..
THE INTERNET
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
WHAT DO WE MEAN BY THIS?
▸ Automated provisioning & configuration
▸ Configuration as code
▸ Version / source controlled
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
TOOLING EXAMPLES
@burythehammer
PROGRAMMABLE
INFRASTRUCTURE
IS AWESOME!
Credit: Vault Boy, Bethesda Softworks
@burythehammer
BUT IT CAN GET
COMPLEX
@burythehammer
TESTING IS USED TO
MITIGATE COMPLEXITY
& RISK
@burythehammer
BUT INFRA TESTING IS RARE
Credit: Gunshow, KC Green
@burythehammer
TESTING A
CLOUD BROKER
AN INFRASTRUCTURE HEAVY PRODUCT
@burythehammer
THE PROBLEM
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
WE WANT TO MOVE TO THE CLOUD...
BUT WE'RE WARY OF LOCK IN
Large organisation
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
USERS
CLOUD BROKER
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
BENEFITS
▸ Quick, easy provisioning
▸ one team previously took 3 months
▸ Don't need to work at a low level
▸ Templates for common dev environments
▸ Built in best practice: monitoring, security
▸ Track spending
@burythehammer
THIS IS A REALLY
COMPLICATED
APPLICATION
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
WORKFLOW
▸ Log into Web UI
▸ Fill in information about environment
▸ Broker creates and bootstraps resources
▸ SSH into resources
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
WEB TESTING
▸ Log into Web UI
▸ Fill in information about environment
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
???
▸ Broker creates and bootstraps resources
▸ SSH into resources
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
INFRASTRUCTURE TESTING
▸ Broker creates and bootstraps resources
▸ SSH into resources
@burythehammer
HOW DO YOU TEST
INFRASTRUCTURE?
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
WHAT TO TEST?
Deployment
scripts unit tests?
Does the VPN server work?
Can instances 

access one another?
Are services running?
Linting?
@burythehammer
THIS SEEMS
FAMILIAR..
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
Does the VPN box work?

Can I SSH into a server?
Do our deployment scripts work?

Linting?
Are services running?
ANOTHER TESTING PYRAMID?
credit: Ubuntu dev quality guide

https://developer.ubuntu.com/en/phone/platform/quality/
Can instances access one another?
expensive, slow
cheap, fast
@burythehammer
TOOLING
@burythehammer
UNIT TESTING
▸ Bash scripts
▸ Ansible scripts
▸ Terraform scripts
@burythehammer
LINTING
▸ Quick sanity check
▸ Available in all tools
▸ Run in CI before committing
@burythehammer
UNIT TESTING IS HARD
▸ Cultural issues
▸ Technical issues
▸ Return on investment
@burythehammer
INTEGRATION
TESTING
▸ Packages installed
▸ Services running
▸ Ports listening
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
▸ Ruby / RSpec based
▸ Great community
▸ Very readable
▸ Very quick!
▸ Can SSH into instances
SERVERSPEC
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
SERVERSPEC EXAMPLE
describe package('jenkins') do
it { should be_installed }
end
describe service('jenkins') do
it { should be_enabled }
it { should be_running }
end
describe port(8080) do
it { should be_listening }
end
@burythehammer
ACCEPTANCE
TESTING
▸ SSHing into machines
▸ Using applications
▸ e.g. samba, openvpn
@burythehammerTESTING PROGRAMMABLE INFRASTRUCTURE
▸ Executable specifications
▸ Both test & business can read it
▸ Available in Ruby, Java, C#... etc
▸ Great reporting
▸ Good CI integration
CUCUMBER
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer


Scenario: Searching for Wikipedia
Given I am on the website "www.google.com"
When I search for "Wikipedia"
Then the first link should be "www.wikipedia.org"
CUCUMBER EXAMPLE
@burythehammerTESTING PROGRAMMABLE INFRASTRUCTURE
RUBY
▸ Fantastic testing community
▸ More suitable for SSHing into boxes
▸ "Win RM" gem
▸ Ops already familiar with it
▸ Reduces tech stack
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
TOOLS WE DIDN'T USE
▸ Bats
▸ ShUnit2
▸ Goss
▸ Inspec / TestInfra
▸ AWS Spec
▸ Test Kitchen
@burythehammer
OUR
SOLUTION
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
USERS
CLOUD BROKER
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
USERS
WEB TEST FRAMEWORK
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
USERS
WEB TESTS
https://github.com/opencredo/test-automation-quickstart
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
USERS
INFRASTRUCTURE TEST FRAMEWORK
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
INFRASTRUCTURE TESTS
Serverspec
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
INFRASTRUCTURE TESTING STACK
/ Serverspec
Linting tools
@burythehammerTESTING PROGRAMMABLE INFRASTRUCTURE
SERVERSPEC SMOKE TESTS
▸ Run before everything else
▸ Really quick
▸ Catches obvious errors
▸ Not complex tasks
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
Background:

Given environment has been created

And the following user details:

| user_alias | username | public_key |

| userA | testuser | test |




Scenario: IPA - Login via SSH Key authentication succeeds

Given user "userA" is authorised to access environment vms

When user "userA" starts ssh session in host "env"


Then I should be able to echo "hello world"

CUCUMBER FOR ACCEPTANCE TESTING
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
Background:

Given environment has been created

And the following user details:

| user_alias | username | public_key |

| userA | testuser | test |






Scenario: IPA - Login via SSH Key authentication succeeds

Given user "userA" is authorised to access environment vms

When user "userA" starts ssh session in host "env"


Then I should be able to echo "hello world"

CUCUMBER FOR ACCEPTANCE TESTING
Cloud broker APIs
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
Background:

Given environment has been created

And the following user details:

| user_alias | username | public_key |

| userA | testuser | test |






Scenario: IPA - Login via SSH Key authentication succeeds

Given user "userA" is authorised to access environment vms

When user "userA" starts ssh session in host "env"


Then I should be able to echo "hello world"

CUCUMBER FOR ACCEPTANCE TESTING
Standard Ruby
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
Background:

Given environment has been created

And the following user details:

| user_alias | username | public_key |

| userA | testuser | test |






Scenario: IPA - Login via SSH Key authentication succeeds

Given user "userA" is authorised to access environment vms

When user "userA" starts ssh session in host "env"


Then I should be able to echo "hello world"

CUCUMBER FOR ACCEPTANCE TESTING
RSpec assertions
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
UNDER THE CUCUMBER, PLAIN RUBY
Then(/^I should be able to echo "([^"]*)"$/) do |text|
cmd = "echo #{text}"
output = @session.exec!(cmd)
close_ssh(@session)
expect(output.to_s.strip).to eql(text)
end
@burythehammer
LESSONS
LEARNED
THE GOOD, THE BAD, AND
THE UGLY
@burythehammerTESTING PROGRAMMABLE INFRASTRUCTURE
THE GOOD
▸ Specialised tests for each layer
▸ Quick, expressive ServerSpec
tests
▸ Power of a full programming
language for user tests
▸ ... it's also totally doable!
Credit: Overwatch, Blizzard Entertainment
@burythehammerTESTING PROGRAMMABLE INFRASTRUCTURE
THE BAD
▸ Over reliance on
acceptance tests
▸ Context switching with
two suites
▸ Out of my comfort zone
Credit: Futurama, Fox
@burythehammerTESTING PROGRAMMABLE INFRASTRUCTURE
THE UGLY
▸ Starting infrastructure is SLOW.
▸ It's expensive...
@burythehammer
IT WAS WORTH IT
DESPITE ALL THAT
@burythehammer
CONCLUSIONS
@burythehammer
TESTING IS
IMPORTANT
BUT OFTEN IGNORED
@burythehammer
TESTERS AND OPS
SHOULD WORK TOGETHER
WE NEED TO GET OUT OF
OUR COMFORT ZONES
@burythehammer
TOOLS EXIST
BUT BE PREPARED
TO HACK
@burythehammer
FINALLY...
TESTING PROGRAMMABLE INFRASTRUCTURE @burythehammer
THE APPLICATION OF METHODS AND TOOLING
FROM SOFTWARE DEVELOPMENT TO
MANAGEMENT OF IT INFRASTRUCTURE
PROGRAMMABLE INFRASTRUCTURE IS..
@burythehammer
TESTING IS A SOFTWARE
DEVELOPMENT METHOD
WE SHOULD APPLY IT TO
INFRASTRUCTURE
@burythehammer
THANKS!
QUESTIONS?
matt.long@opencredo.com
<-- sponsors booth on 5th floor!
@burythehammer
Watch the video with slide
synchronization on InfoQ.com!
https://www.infoq.com/presentations/
opencredo-ruby

Contenu connexe

Tendances

Tendances (20)

Apache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and TomcatApache httpd Reverse Proxy and Tomcat
Apache httpd Reverse Proxy and Tomcat
 
February OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for NewbiesFebruary OpenNTF Webinar: Introduction to Ansible for Newbies
February OpenNTF Webinar: Introduction to Ansible for Newbies
 
DevOps and Continuous Delivery reference architectures for Docker
DevOps and Continuous Delivery reference architectures for DockerDevOps and Continuous Delivery reference architectures for Docker
DevOps and Continuous Delivery reference architectures for Docker
 
Rise of the Machines - Automate your Development
Rise of the Machines - Automate your DevelopmentRise of the Machines - Automate your Development
Rise of the Machines - Automate your Development
 
At Your Service: Using Jenkins in Operations
At Your Service: Using Jenkins in OperationsAt Your Service: Using Jenkins in Operations
At Your Service: Using Jenkins in Operations
 
Apache HTTPD 2.4 - GWO2016
Apache HTTPD 2.4 - GWO2016Apache HTTPD 2.4 - GWO2016
Apache HTTPD 2.4 - GWO2016
 
Git 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using GitGit 101 - Crash Course in Version Control using Git
Git 101 - Crash Course in Version Control using Git
 
Game of Codes: the Battle for CI
Game of Codes: the Battle for CIGame of Codes: the Battle for CI
Game of Codes: the Battle for CI
 
Dockercon2015 bamboo
Dockercon2015 bambooDockercon2015 bamboo
Dockercon2015 bamboo
 
Gitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTreeGitlab Training with GIT and SourceTree
Gitlab Training with GIT and SourceTree
 
Large scale automation with jenkins
Large scale automation with jenkinsLarge scale automation with jenkins
Large scale automation with jenkins
 
Getting started with Jenkins
Getting started with JenkinsGetting started with Jenkins
Getting started with Jenkins
 
7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users7 Habits of Highly Effective Jenkins Users
7 Habits of Highly Effective Jenkins Users
 
Effective Testing with Ansible and InSpec
Effective Testing with Ansible and InSpecEffective Testing with Ansible and InSpec
Effective Testing with Ansible and InSpec
 
Jenkins Best Practices
Jenkins Best PracticesJenkins Best Practices
Jenkins Best Practices
 
Making the most of your gradle build - vJUG24 2017
Making the most of your gradle build - vJUG24 2017Making the most of your gradle build - vJUG24 2017
Making the most of your gradle build - vJUG24 2017
 
Making the most of your gradle build - BaselOne 2017
Making the most of your gradle build - BaselOne 2017Making the most of your gradle build - BaselOne 2017
Making the most of your gradle build - BaselOne 2017
 
Automatisation in development and testing - within budget
Automatisation in development and testing - within budgetAutomatisation in development and testing - within budget
Automatisation in development and testing - within budget
 
(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines(Declarative) Jenkins Pipelines
(Declarative) Jenkins Pipelines
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 

Similaire à Testing Programmable Infrastructure with Ruby

Similaire à Testing Programmable Infrastructure with Ruby (20)

London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt LongLondon Hashicorp Meetup #8 -  Testing Programmable Infrastructure By Matt Long
London Hashicorp Meetup #8 - Testing Programmable Infrastructure By Matt Long
 
Testing servers like software
Testing servers like softwareTesting servers like software
Testing servers like software
 
Why Kubernetes? Cloud Native and Developer Experience at Zalando - OWL Tech &...
Why Kubernetes? Cloud Native and Developer Experience at Zalando - OWL Tech &...Why Kubernetes? Cloud Native and Developer Experience at Zalando - OWL Tech &...
Why Kubernetes? Cloud Native and Developer Experience at Zalando - OWL Tech &...
 
The Prowess of Prow
The Prowess of Prow  The Prowess of Prow
The Prowess of Prow
 
A Love Story with Kubevirt and Backstage from Cloud Native NoVA meetup Feb 2024
A Love Story with Kubevirt and Backstage from Cloud Native NoVA meetup Feb 2024A Love Story with Kubevirt and Backstage from Cloud Native NoVA meetup Feb 2024
A Love Story with Kubevirt and Backstage from Cloud Native NoVA meetup Feb 2024
 
WordPress with WP Engine and the Agency Partner Program: Getting Set Up
WordPress with WP Engine and the Agency Partner Program: Getting Set UpWordPress with WP Engine and the Agency Partner Program: Getting Set Up
WordPress with WP Engine and the Agency Partner Program: Getting Set Up
 
Docker Containers for Continuous Delivery
Docker Containers for Continuous DeliveryDocker Containers for Continuous Delivery
Docker Containers for Continuous Delivery
 
Building a great internal platform starts with the API
Building a great internal platform starts with the API Building a great internal platform starts with the API
Building a great internal platform starts with the API
 
Streamlining API with Swagger.io
Streamlining API with Swagger.ioStreamlining API with Swagger.io
Streamlining API with Swagger.io
 
Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build Pipeline
 
Developing applications with Hyperledger Fabric SDK
Developing applications with Hyperledger Fabric SDKDeveloping applications with Hyperledger Fabric SDK
Developing applications with Hyperledger Fabric SDK
 
QA or the Highway 2022.pptx
QA or the Highway 2022.pptxQA or the Highway 2022.pptx
QA or the Highway 2022.pptx
 
Testing as a container
Testing as a containerTesting as a container
Testing as a container
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 
DevOps para Open Source com Azure DevOps
DevOps para Open Source com Azure DevOpsDevOps para Open Source com Azure DevOps
DevOps para Open Source com Azure DevOps
 
Halifax DevOps - Meet-up - July.19 2017
Halifax DevOps - Meet-up - July.19 2017Halifax DevOps - Meet-up - July.19 2017
Halifax DevOps - Meet-up - July.19 2017
 
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
goployer, 코드 기반의 배포 도구 - 송주영 (beNX) :: AWS Community Day 2020
 
Red hat cloud platforms
Red hat cloud platformsRed hat cloud platforms
Red hat cloud platforms
 
Continuous Deployment of your Application @jSession#5
Continuous Deployment of your Application @jSession#5Continuous Deployment of your Application @jSession#5
Continuous Deployment of your Application @jSession#5
 
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
 

Plus de C4Media

Plus de C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Navigating Complexity: High-performance Delivery and Discovery Teams
Navigating Complexity: High-performance Delivery and Discovery TeamsNavigating Complexity: High-performance Delivery and Discovery Teams
Navigating Complexity: High-performance Delivery and Discovery Teams
 

Dernier

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Dernier (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
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
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
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)
 
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?
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 

Testing Programmable Infrastructure with Ruby