require 'spec_helper' describe Arachni::Platform::Fingerprinter do describe '#page' do it 'returns the given page' do page = Arachni::Page.new described_class.new( page ).page.should == page end end describe '#parameters' do it 'returns the downcased page parameters' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', query_vars: { 'A' => 'B', 'C' => 'D' } ) described_class.new( page ).parameters.should == { 'a' => 'b', 'c' => 'd' } end end describe '#cookies' do it 'returns the downcased cookies' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', cookies: [ Arachni::Cookie.new( 'http://stuff.com?A=B', { 'nAmE' => 'vAlUe' } )] ) described_class.new( page ).cookies.should == { 'name' => 'value' } end end describe '#headers' do it 'returns the downcased headers' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'nAmE' => 'vAlUe' } ) described_class.new( page ).headers.should == { 'name' => 'value' } end end describe '#powered_by' do it 'returns the value of the X-Powered-By header' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'x-PowEred-BY' => 'UberServer' } ) described_class.new( page ).powered_by.should == 'uberserver' end end describe '#server' do it 'returns the value of the X-Powered-By header' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'SeRvEr' => 'UberServer' } ) described_class.new( page ).server.should == 'uberserver' end end describe '#extension' do it 'returns the file extension of the page resource' do page = Arachni::Page.new( url: 'http://stuff.com/blah.stuff/page.pHp' ) described_class.new( page ).extension.should == 'php' end end describe '#platforms' do it 'returns platforms of the page' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'SeRvEr' => 'UberServer' } ) described_class.new( page ).platforms.should == page.platforms end end describe '#server_or_powered_by_include?' do context 'when the Server header contains the given string' do it 'returns true' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'SeRvEr' => 'UberServer/32' } ) described_class.new( page ).server_or_powered_by_include?( 'uberserver' ).should be_true end end context 'when the X-Powered-By header contains the given string' do it 'returns true' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'X-Powered-By' => 'UberServer/32' } ) described_class.new( page ).server_or_powered_by_include?( 'uberserver' ).should be_true end end context 'when both the Server or X-Powered-By header contain the given string' do it 'returns true' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'X-Powered-By' => 'UberServer/32', 'Server' => 'UberServer/32', } ) described_class.new( page ).server_or_powered_by_include?( 'uberserver' ).should be_true end end context 'when the Server header does not contain the given string' do it 'returns true' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'SeRvEr' => 'Server/32' } ) described_class.new( page ).server_or_powered_by_include?( 'uberserver' ).should be_false end end context 'when the X-Powered-By header does not contain the given string' do it 'returns true' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'X-Powered-By' => 'Server/32' } ) described_class.new( page ).server_or_powered_by_include?( 'uberserver' ).should be_false end end context 'when the X-Powered-By header does not contain the given string' do it 'returns true' do page = Arachni::Page.new( url: 'http://stuff.com?A=B', response_headers: { 'Server' => 'Server/32', 'X-Powered-By' => 'Server/32' } ) described_class.new( page ).server_or_powered_by_include?( 'uberserver' ).should be_false end end end end