diff --git a/app/controllers/clusters_controller.rb b/app/controllers/clusters_controller.rb index a51e4aa56751b33ec8a01f10a1f1f602beb5bac7..f63723f45ef79381764cd1dbacbb6dab5c091c26 100644 --- a/app/controllers/clusters_controller.rb +++ b/app/controllers/clusters_controller.rb @@ -19,9 +19,9 @@ require 'resources_controller' # Logic for changing inheritance : From the perspective of a controller, # the ClustersController is a special case of a SitesController, # for specific clusters, insofar that this attribute is limited to the status function -class ClustersController < SitesController +class ClustersController < ResourcesController - # abasu : method to return status of a specific cluster - bug ref 5856 -- 2015.3.19 + # abasu : method to return status of a specific cluster - bug ref 5856 -- 2015.03.19 def status result = { "uid" => Time.now.to_i, @@ -49,7 +49,18 @@ class ClustersController < SitesController protected def collection_path - site_clusters_path(params[:site_id]) + site_clusters_path(params[:id]) + end + + # abasu : method to prepare links for status of a cluster - bug ref 5856 -- 2015.04.17 + def links_for_item(item) + links = super(item) + links.push({ + "rel" => "status", + "type" => media_type(:g5kitemjson), + "href" => uri_to(File.join(resource_path(item["uid"]), "status")) + }) + links end end diff --git a/config/routes.rb b/config/routes.rb index 490848174c25845e5b3b279d60fc3772be5da51d..af4efbdc2effb0c9fe0f50ea3cb71d099cbe4cc0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -23,18 +23,22 @@ Api::Application.routes.draw do match '*resource/versions' => 'versions#index', :via => [:get] match '*resource/versions/:id' => 'versions#show', :via => [:get] - # abasu : 1 line introduced below by abasu for correction to bug ref 5065 -- 2015.01.23 + # abasu : 1 line introduced below for correction to bug ref 5065 -- 2015.01.23 resources :environments, :only => [:index, :show], :constraints => { :id => /[0-9A-Za-z\-\.]+/ } resources :network_equipments, :only => [:index, :show] resources :sites, :only => [:index, :show] do member do get :status end - # abasu : 1 line introduced below by abasu for correction to bug ref 5065 -- 2015.01.23 + # abasu : 1 line introduced below for correction to bug ref 5065 -- 2015.01.23 resources :environments, :only => [:index, :show], :constraints => { :id => /[0-9A-Za-z\-\.]+/ } resources :network_equipments, :only => [:index, :show] resources :pdus, :only => [:index, :show] resources :clusters, :only => [:index, :show] do + # abasu : 3 lines introduced below for correction to bug ref 5856 -- 2015.04.17 + member do + get :status + end resources :nodes, :only => [:index, :show] end resources :jobs diff --git a/spec/controllers/clusters_controller_spec.rb b/spec/controllers/clusters_controller_spec.rb index 705409d2f03d7d0171d6b38450147c3925bfe67b..7f0818fac967095e1492a4bb8fcf2d73561590c3 100644 --- a/spec/controllers/clusters_controller_spec.rb +++ b/spec/controllers/clusters_controller_spec.rb @@ -33,6 +33,27 @@ describe ClustersController do json['nodes'].keys.uniq.sort.should == ["parapluie-1.rennes.grid5000.fr", "parapluie-10.rennes.grid5000.fr", "parapluie-11.rennes.grid5000.fr", "parapluie-12.rennes.grid5000.fr", "parapluie-13.rennes.grid5000.fr", "parapluie-14.rennes.grid5000.fr", "parapluie-15.rennes.grid5000.fr", "parapluie-16.rennes.grid5000.fr", "parapluie-17.rennes.grid5000.fr", "parapluie-18.rennes.grid5000.fr", "parapluie-19.rennes.grid5000.fr", "parapluie-2.rennes.grid5000.fr", "parapluie-20.rennes.grid5000.fr", "parapluie-21.rennes.grid5000.fr", "parapluie-22.rennes.grid5000.fr", "parapluie-23.rennes.grid5000.fr", "parapluie-24.rennes.grid5000.fr", "parapluie-25.rennes.grid5000.fr", "parapluie-26.rennes.grid5000.fr", "parapluie-27.rennes.grid5000.fr", "parapluie-28.rennes.grid5000.fr", "parapluie-29.rennes.grid5000.fr", "parapluie-3.rennes.grid5000.fr", "parapluie-30.rennes.grid5000.fr", "parapluie-31.rennes.grid5000.fr", "parapluie-32.rennes.grid5000.fr", "parapluie-33.rennes.grid5000.fr", "parapluie-34.rennes.grid5000.fr", "parapluie-35.rennes.grid5000.fr", "parapluie-36.rennes.grid5000.fr", "parapluie-37.rennes.grid5000.fr", "parapluie-38.rennes.grid5000.fr", "parapluie-39.rennes.grid5000.fr", "parapluie-4.rennes.grid5000.fr", "parapluie-40.rennes.grid5000.fr", "parapluie-5.rennes.grid5000.fr", "parapluie-51.rennes.grid5000.fr", "parapluie-52.rennes.grid5000.fr", "parapluie-53.rennes.grid5000.fr", "parapluie-54.rennes.grid5000.fr", "parapluie-55.rennes.grid5000.fr", "parapluie-6.rennes.grid5000.fr", "parapluie-7.rennes.grid5000.fr", "parapluie-8.rennes.grid5000.fr", "parapluie-9.rennes.grid5000.fr"] end # "should return all nodes in the specified cluster for which the status is requested" + it "should return the status with the correct links" do + get :status, :site_id => "rennes", :id => "parapluie", :format => :json + response.status.should == 200 + assert_media_type(:json) + + # the "links" section should be an array with only 2 elements "self" and "parent" + json["links"].should be_a(Array) + json["links"].length.should == 2 + + # first element is "self" + json["links"][0].should == {"rel"=>"self", + "href"=>"/sites/parapluie/status", + "type"=>"application/vnd.grid5000.item+json"} + # second element is "parent" + json["links"][1].should == {"rel"=>"parent", + "href"=>"/sites/parapluie", + "type"=>"application/vnd.grid5000.item+json"} + end # "should return the status with the correct links" + + + end # "GET /sites/{{site_id}}/clusters/{{id}}/status" end