[PATCH aeolus-conductor] BZ#790434 Check unique assembly names on deployable xml
mtaylor at redhat.com
mtaylor at redhat.com
Thu Feb 16 10:53:44 UTC 2012
From: Martyn Taylor <mtaylor at redhat.com>
---
src/app/models/deployable.rb | 4 +++-
src/app/util/deployable_xml.rb | 4 ++++
src/config/locales/cs.yml | 1 +
src/config/locales/en.yml | 1 +
src/spec/factories/deployable.rb | 15 +++++++++++++++
src/spec/models/deployable_spec.rb | 5 +++++
6 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/src/app/models/deployable.rb b/src/app/models/deployable.rb
index c9df4c5..3c8bdbd 100644
--- a/src/app/models/deployable.rb
+++ b/src/app/models/deployable.rb
@@ -48,8 +48,10 @@ class Deployable < ActiveRecord::Base
def valid_deployable_xml?
begin
deployable_xml = DeployableXML.new(xml)
- unless deployable_xml.validate!
+ if !deployable_xml.validate!
errors.add(:xml, I18n.t('catalog_entries.flash.warning.not_valid'))
+ elsif !deployable_xml.unique_assembly_names?
+ errors.add(:xml, I18n.t('catalog_entries.flash.warning.not_valid_duplicate_assembly_names'))
end
rescue Nokogiri::XML::SyntaxError => e
errors.add(:base, I18n.t("deployments.errors.not_valid_deployable_xml", :msg => "#{e.message}"))
diff --git a/src/app/util/deployable_xml.rb b/src/app/util/deployable_xml.rb
index 3032b5e..272476d 100644
--- a/src/app/util/deployable_xml.rb
+++ b/src/app/util/deployable_xml.rb
@@ -212,6 +212,10 @@ class DeployableXML
errors.empty?
end
+ def unique_assembly_names?
+ @root.xpath("/deployable/assemblies/assembly/@name").collect { |e| e.value }.uniq!.nil?
+ end
+
def assemblies
@assemblies ||=
@root.xpath('/deployable/assemblies/assembly').collect do |assembly_node|
diff --git a/src/config/locales/cs.yml b/src/config/locales/cs.yml
index 7ada0cc..e004fa1 100644
--- a/src/config/locales/cs.yml
+++ b/src/config/locales/cs.yml
@@ -216,6 +216,7 @@ cs:
warning:
not_valid_or_reachable: mcdmhig jiama afc nfdi ef jhifen bagekcj di dd bjokkm kefddkmcb dn
not_valid: cdjodmkfmo cmg jmjkbee namcgnb foblo kio hkgk
+ not_valid_duplicate_assembly_names: dsadf asdfsad oi ppoi jflf opifas
properties:
properties_for: nmiknfjdii hdk
permissions:
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index fbacbc0..6de7502 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -662,6 +662,7 @@ en:
not_valid_or_reachable: "Deployable XML file is either invalid or no longer reachable at %{url}"
no_url_provided: "No URL provided for the deployable XML file."
not_valid: "Deployable XML file doesn't resolve valid XML"
+ not_valid_duplicate_assembly_names: "Deployable XML must contain unique assembly names"
failed: Deployable was not created.
notice:
added: Deployable added to catalog %{catalog}.
diff --git a/src/spec/factories/deployable.rb b/src/spec/factories/deployable.rb
index d5afa1e..efbfc6e 100644
--- a/src/spec/factories/deployable.rb
+++ b/src/spec/factories/deployable.rb
@@ -34,6 +34,21 @@ FactoryGirl.define do
end
+ factory :deployable_unique_name_violation, :parent => :deployable do
+ xml "<?xml version=\"1.0\"?>
+ <deployable version='1.0' name='my'>
+ <description>This is my testing image</description>
+ <assemblies>
+ <assembly name='frontend' hwp='front_hwp1'>
+ <image id='53d2a281-448b-4872-b1b0-680edaad5922' build='63838705-8608-44c6-aded-7c243137172c'></image>
+ </assembly>
+ <assembly name='frontend' hwp='front_hwp2'>
+ <image id='53d2a281-448b-4872-b1b0-680edaad5922' build='63838705-8608-44c6-aded-7c243137172c'></image>
+ </assembly>
+ </assemblies>
+ </deployable>"
+ end
+
factory :deployable_with_parameters, :parent => :deployable do
xml "<?xml version=\"1.0\"?>
<deployable version='1.0' name='deployable_with_launch_parameters'>
diff --git a/src/spec/models/deployable_spec.rb b/src/spec/models/deployable_spec.rb
index 7e91ae2..af3f4b0 100644
--- a/src/spec/models/deployable_spec.rb
+++ b/src/spec/models/deployable_spec.rb
@@ -38,4 +38,9 @@ describe Deployable do
deployable.should_not be_valid
end
+ it "should not be valid if xml has multiple assemblies with the same name" do
+ deployable = FactoryGirl.build(:deployable_unique_name_violation)
+ deployable.valid_deployable_xml?
+ deployable.errors[:xml].should == ["Deployable XML must contain unique assembly names"]
+ end
end
--
1.7.6.4
More information about the aeolus-devel
mailing list