summaryrefslogtreecommitdiff
path: root/test/soap/header/test_simplehandler.rb
blob: 75dbd4a55006aad949ef6fdf3c0581ab1e3f98f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
require 'test/unit'
require 'soap/rpc/driver'
require 'soap/rpc/standaloneServer'
require 'soap/header/simplehandler'


module SOAP
module Header


class TestSimpleHandler < Test::Unit::TestCase
  Port = 17171
  PortName = 'http://tempuri.org/authHeaderPort'

  class PingPortServer < SOAP::RPC::StandaloneServer
    class PingService
      def self.create
	new
      end

      def ping
        Thread.current[:pingheader]
      end
    end

    def initialize(*arg)
      super
      add_rpc_servant(PingService.new, PortName)
      add_request_headerhandler(PingServerHeaderHandler)
    end

    class PingServerHeaderHandler < SOAP::Header::SimpleHandler
      MyHeaderName = XSD::QName.new("http://xmlsoap.org/Ping", "PingHeader")
  
      def self.create
        new
      end

      def initialize()
        super(MyHeaderName)
      end

      def on_simple_outbound
        "dummy"
      end

      def on_simple_inbound(my_header, mu)
        Thread.current[:pingheader] = my_header
      end
    end
  end

  class PingClientHeaderHandler < SOAP::Header::SimpleHandler
    MyHeaderName = XSD::QName.new("http://xmlsoap.org/Ping", "PingHeader")

    def initialize(pingHeader)
      super(MyHeaderName)
      @pingHeader = pingHeader
      @mustunderstand = false
    end

    def on_simple_outbound
      @pingHeader # --- note, not a Hash
    end

    def on_simple_inbound(my_header, mustunderstand)
      Thread.current[:pingheader] = my_header
    end
  end

  def setup
    @endpoint = "http://localhost:#{Port}/"
    setup_server
    setup_client
  end

  def setup_server
    @server = PingPortServer.new(self.class.name, nil, '0.0.0.0', Port)
    @server.level = Logger::Severity::ERROR
    @t = Thread.new {
      @server.start
    }
  end

  def setup_client
    @client = SOAP::RPC::Driver.new(@endpoint, PortName)
    @client.wiredump_dev = STDERR if $DEBUG
    @client.add_method('ping')
  end

  def teardown
    teardown_server
    teardown_client
  end

  def teardown_server
    @server.shutdown
    @t.kill
    @t.join
  end

  def teardown_client
    @client.reset_stream
  end

  def test_string
    h = PingClientHeaderHandler.new('pingheader')
    @client.headerhandler << h
    assert_equal("pingheader", @client.ping)
    assert_equal("dummy", Thread.current[:pingheader])
  end
end


end
end