Class Jabber::Test::ListenerMocker
In: lib/xmpp4r/test/listener_mocker.rb
Parent: Object
Message Presence XMPPStanza Iq XMPPElement ErrorResponse X IqQuery JabberError ComponentAuthenticationFailure ArgumentError InvalidChatState SOCKS5Error ServerError NoNameXmlnsRegistered ServerDisconnected ClientAuthenticationFailure Connection Client Component Connection Client Singleton IdGenerator Comparable JID Enumerable CallbackList Items Publish StandardError REXML::Element Stream XMPPElement Location IqFeature StreamHost IqSiFile IqSiFileRange IqSi StreamHostUsed XRosterItem RosterItem C Body HTML UserItem XMUCUserInvite Configuration Retract IqPubSub Item IqPubSubOwner Event Subscription Unsubscribe Tune XDataField XDataReported XDataTitle XDataInstructions Feature Item Identity IqVcard PubSub::ServiceHelper Helper Helper SOCKS5Bytestreams SOCKS5BytestreamsTarget SOCKS5BytestreamsInitiator SOCKS5BytestreamsServerStreamHost TCPSocket SOCKS5Socket IqQuery IqQueryBytestreams IqQueryRoster IqQueryVersion IqQueryRPC IqQueryMUCOwner IqQueryMUCAdmin IqQueryDiscoItems IqQueryDiscoInfo IqQueryLastActivity IBB IBBTarget IBBInitiator RosterXItem XRoster RosterX X XDelay XMUC XMUCUser XData Responder SimpleResponder Iq IqCommand XMLRPC::ParserWriterChooseMixin Client Server XMLRPC::ParseContentType XMLRPC::BasicServer MUCClient SimpleMUCClient MUC::UserItem XMUCUserItem IqQueryMUCAdminItem XParent SubscriptionConfig NodeConfig OwnerNodeConfig EventItems ServiceHelper OAuthServiceHelper NodeHelper EventItem Base Anonymous DigestMD5 Plain FileSource Base Bot Callback StreamParser Semaphore SOCKS5BytestreamsPeer SOCKS5BytestreamsServer IBBQueueItem Helper Responder Helper Listener MUCBrowser NodeBrowser ListenerMocker Helper Responder Helper Helper Helper lib/xmpp4r/message.rb lib/xmpp4r/connection.rb lib/xmpp4r/xmppstanza.rb lib/xmpp4r/iq.rb lib/xmpp4r/callbacks.rb lib/xmpp4r/idgenerator.rb lib/xmpp4r/stream.rb lib/xmpp4r/client.rb lib/xmpp4r/jid.rb lib/xmpp4r/x.rb lib/xmpp4r/streamparser.rb lib/xmpp4r/semaphore.rb lib/xmpp4r/errors.rb lib/xmpp4r/component.rb lib/xmpp4r/presence.rb lib/xmpp4r/xmppelement.rb lib/xmpp4r/query.rb XParent lib/xmpp4r/location/helper/helper.rb lib/xmpp4r/location/location.rb UserLocation lib/xmpp4r/feature_negotiation/iq/feature.rb FeatureNegotiation lib/xmpp4r/bytestreams/iq/si.rb lib/xmpp4r/bytestreams/helper/ibb/initiator.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb lib/xmpp4r/bytestreams/iq/bytestreams.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb lib/xmpp4r/bytestreams/helper/ibb/target.rb lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb lib/xmpp4r/bytestreams/helper/ibb/base.rb Bytestreams lib/xmpp4r/roster/x/roster.rb lib/xmpp4r/roster/helper/roster.rb lib/xmpp4r/roster/iq/roster.rb Roster lib/xmpp4r/version/helper/responder.rb lib/xmpp4r/version/helper/simpleresponder.rb lib/xmpp4r/version/iq/version.rb Version lib/xmpp4r/command/iq/command.rb lib/xmpp4r/command/helper/responder.rb Command lib/xmpp4r/caps/helper/helper.rb lib/xmpp4r/caps/c.rb Caps lib/xmpp4r/reliable.rb Reliable lib/xmpp4r/delay/x/delay.rb Delay lib/xmpp4r/xhtml/html.rb XHTML lib/xmpp4r/rpc/helper/server.rb lib/xmpp4r/rpc/helper/client.rb lib/xmpp4r/rpc/iq/rpc.rb RPC lib/xmpp4r/muc/iq/mucadminitem.rb lib/xmpp4r/muc/x/muc.rb lib/xmpp4r/muc/item.rb lib/xmpp4r/muc/helper/simplemucclient.rb lib/xmpp4r/muc/iq/mucadmin.rb lib/xmpp4r/muc/helper/mucbrowser.rb lib/xmpp4r/muc/x/mucuseritem.rb lib/xmpp4r/muc/x/mucuserinvite.rb lib/xmpp4r/muc/iq/mucowner.rb lib/xmpp4r/muc/helper/mucclient.rb MUC lib/xmpp4r/pubsub/children/item.rb lib/xmpp4r/pubsub/children/configuration.rb lib/xmpp4r/pubsub/children/subscription.rb lib/xmpp4r/pubsub/helper/servicehelper.rb lib/xmpp4r/pubsub/children/unsubscribe.rb lib/xmpp4r/pubsub/children/publish.rb lib/xmpp4r/pubsub/helper/oauth_service_helper.rb lib/xmpp4r/pubsub/children/event.rb lib/xmpp4r/pubsub/iq/pubsub.rb lib/xmpp4r/pubsub/children/retract.rb lib/xmpp4r/pubsub/helper/nodebrowser.rb lib/xmpp4r/pubsub/helper/nodehelper.rb lib/xmpp4r/pubsub/children/items.rb lib/xmpp4r/pubsub/children/subscription_config.rb lib/xmpp4r/pubsub/children/node_config.rb OAuthPubSubStreamHelper PubSub lib/xmpp4r/httpbinding/client.rb HTTPBinding lib/xmpp4r/tune/helper/helper.rb lib/xmpp4r/tune/tune.rb UserTune lib/xmpp4r/sasl.rb SASL lib/xmpp4r/test/listener_mocker.rb Test lib/xmpp4r/dataforms/x/data.rb Dataforms lib/xmpp4r/discovery/helper/helper.rb lib/xmpp4r/discovery/iq/discoinfo.rb lib/xmpp4r/discovery/helper/responder.rb lib/xmpp4r/discovery/iq/discoitems.rb Discovery lib/xmpp4r/bytestreams/helper/filetransfer.rb TransferSource FileTransfer lib/xmpp4r/last/helper/helper.rb lib/xmpp4r/last/iq/last.rb LastActivity lib/xmpp4r/framework/base.rb lib/xmpp4r/framework/bot.rb Framework lib/xmpp4r/vcard/helper/vcard.rb lib/xmpp4r/vcard/iq/vcard.rb Vcard Jabber dot/m_110_0.png

Methods

Attributes

mock_clients  [RW] 
tracker_of_callers  [RW] 
with_socket_mocked_callback_proc  [RW] 

Public Class methods

[Source]

     # File lib/xmpp4r/test/listener_mocker.rb, line 99
 99:       def self.mock_out(listener)
100:         listener.instance_eval do
101:           class << self
102:             def setup_connection
103:               super
104:               @connection.instance_eval do
105:                 class << self
106:                   self.class_eval(&Jabber::Test::ListenerMocker.mocker_proc)
107:                 end
108:               end
109:             end
110:           end
111:         end
112:     
113:         listener
114:       end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 95
95:       def self.mock_out_all_connections
96:         Jabber::Reliable::Connection.class_eval(&Jabber::Test::ListenerMocker.mocker_proc)
97:       end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 30
30:       def self.mocker_proc
31:         Proc.new do      
32:           attr_accessor :messagecbs, :connected
33:           ListenerMocker.mock_clients ||= {}
34:           ListenerMocker.tracker_of_callers ||= {}
35:       
36:           def connect
37:             Jabber::debuglog("(in mock) connected #{@jid.bare}")
38:             self.connected = true          
39:           end
40:       
41:           def close!
42:             ListenerMocker.mock_clients[@jid.bare.to_s] = nil
43:             ListenerMocker.tracker_of_callers[@jid.bare.to_s] = nil
44:             self.connected = false
45:           end
46:       
47:           def auth(password)
48:             auth_nonsasl(password)
49:           end
50:       
51:           def auth_nonsasl(password, digest=true)
52:             Jabber::debuglog("(in mock) authed #{@jid.bare}") 
53:       
54:             if(ListenerMocker.mock_clients[@jid.bare.to_s])
55:               #raise a stack trace about multiple clients
56:               raise "\n\n ---> READ ME: this is actualy 2 stack traces: <---- \n\n"+
57:               "There is already a client connected on that jid #{@jid.bare.to_s}. "+
58:               "The mock library cannot support multiple listeners connected as the same user! originally called in:\n"+
59:               ListenerMocker.tracker_of_callers[@jid.bare.to_s].backtrace.join("\n")+"\n\n second trace: \n"
60:             else
61:               #store a stack trace so that next time we have multiple client, we can alert about it...
62:               begin
63:                 throw "just saving a stack trace"
64:               rescue => e
65:                 ListenerMocker.tracker_of_callers[@jid.bare.to_s] = e
66:               end
67:             end
68: 
69:             ListenerMocker.mock_clients[@jid.bare.to_s] = self
70:             true
71:           end
72:       
73:           def send(xml, &block)
74:             Jabber::debuglog("(in mock) sending #{xml} #{xml.class}")
75:             if(xml.is_a?(Jabber::Message))
76:               xml.from = @jid
77:               # unless xml.to
78:               #   raise "no jid!"
79:               # end
80:               if ListenerMocker.mock_clients[xml.to.bare.to_s]
81:                 Jabber::debuglog("(in mock) to #{xml.to.bare.to_s}")
82:                 ListenerMocker.mock_clients[xml.to.bare.to_s].messagecbs.process(xml)
83:               else
84:                 Jabber::debuglog("(in mock) no client listening as #{xml.to.bare.to_s}")
85:               end
86:             end
87:           end          
88:       
89:           def is_connected?
90:             self.connected
91:           end                
92:         end    
93:       end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 13
13:           def initialize(*args)
14:             initialize_old(*args) if ListenerMocker.with_socket_mocked_callback_proc.call(args)
15:           end

[Source]

     # File lib/xmpp4r/test/listener_mocker.rb, line 102
102:             def setup_connection
103:               super
104:               @connection.instance_eval do
105:                 class << self
106:                   self.class_eval(&Jabber::Test::ListenerMocker.mocker_proc)
107:                 end
108:               end
109:             end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 9
 9:       def self.with_socket_mocked(callback_proc)
10:         TCPSocket.class_eval{ ListenerMocker.with_socket_mocked_callback_proc = callback_proc }
11:         TCPSocket.class_eval do
12:           alias_method :initialize_old, :initialize
13:           def initialize(*args)
14:             initialize_old(*args) if ListenerMocker.with_socket_mocked_callback_proc.call(args)
15:           end
16:         end
17:         yield
18:       ensure
19:         TCPSocket.class_eval do
20:           if method_defined?(:initialize_old)
21:             alias_method :initialize, :initialize_old
22:           end
23:         end
24:       end

Public Instance methods

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 47
47:           def auth(password)
48:             auth_nonsasl(password)
49:           end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 51
51:           def auth_nonsasl(password, digest=true)
52:             Jabber::debuglog("(in mock) authed #{@jid.bare}") 
53:       
54:             if(ListenerMocker.mock_clients[@jid.bare.to_s])
55:               #raise a stack trace about multiple clients
56:               raise "\n\n ---> READ ME: this is actualy 2 stack traces: <---- \n\n"+
57:               "There is already a client connected on that jid #{@jid.bare.to_s}. "+
58:               "The mock library cannot support multiple listeners connected as the same user! originally called in:\n"+
59:               ListenerMocker.tracker_of_callers[@jid.bare.to_s].backtrace.join("\n")+"\n\n second trace: \n"
60:             else
61:               #store a stack trace so that next time we have multiple client, we can alert about it...
62:               begin
63:                 throw "just saving a stack trace"
64:               rescue => e
65:                 ListenerMocker.tracker_of_callers[@jid.bare.to_s] = e
66:               end
67:             end
68: 
69:             ListenerMocker.mock_clients[@jid.bare.to_s] = self
70:             true
71:           end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 41
41:           def close!
42:             ListenerMocker.mock_clients[@jid.bare.to_s] = nil
43:             ListenerMocker.tracker_of_callers[@jid.bare.to_s] = nil
44:             self.connected = false
45:           end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 36
36:           def connect
37:             Jabber::debuglog("(in mock) connected #{@jid.bare}")
38:             self.connected = true          
39:           end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 89
89:           def is_connected?
90:             self.connected
91:           end

[Source]

    # File lib/xmpp4r/test/listener_mocker.rb, line 73
73:           def send(xml, &block)
74:             Jabber::debuglog("(in mock) sending #{xml} #{xml.class}")
75:             if(xml.is_a?(Jabber::Message))
76:               xml.from = @jid
77:               # unless xml.to
78:               #   raise "no jid!"
79:               # end
80:               if ListenerMocker.mock_clients[xml.to.bare.to_s]
81:                 Jabber::debuglog("(in mock) to #{xml.to.bare.to_s}")
82:                 ListenerMocker.mock_clients[xml.to.bare.to_s].messagecbs.process(xml)
83:               else
84:                 Jabber::debuglog("(in mock) no client listening as #{xml.to.bare.to_s}")
85:               end
86:             end
87:           end

[Validate]