ruby-dbus-openplacos 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +504 -0
- data/NEWS +146 -0
- data/README +42 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/doc/tutorial/index.markdown +480 -0
- data/examples/gdbus/gdbus +255 -0
- data/examples/gdbus/gdbus.glade +184 -0
- data/examples/gdbus/launch.sh +4 -0
- data/examples/no-introspect/nm-test.rb +21 -0
- data/examples/no-introspect/tracker-test.rb +16 -0
- data/examples/rhythmbox/playpause.rb +25 -0
- data/examples/service/call_service.rb +25 -0
- data/examples/service/service_newapi.rb +51 -0
- data/examples/simple/call_introspect.rb +34 -0
- data/examples/simple/properties.rb +19 -0
- data/examples/utils/listnames.rb +11 -0
- data/examples/utils/notify.rb +19 -0
- data/lib/dbus/auth.rb +258 -0
- data/lib/dbus/bus.rb +947 -0
- data/lib/dbus/core_ext/class/attribute.rb +91 -0
- data/lib/dbus/core_ext/kernel/singleton_class.rb +14 -0
- data/lib/dbus/core_ext/module/remove_method.rb +12 -0
- data/lib/dbus/error.rb +44 -0
- data/lib/dbus/export.rb +124 -0
- data/lib/dbus/introspect.rb +570 -0
- data/lib/dbus/marshall.rb +443 -0
- data/lib/dbus/matchrule.rb +100 -0
- data/lib/dbus/message.rb +310 -0
- data/lib/dbus/type.rb +222 -0
- data/lib/dbus.rb +83 -0
- data/ruby-dbus-openplacos.gemspec +17 -0
- data/test/binding_test.rb +56 -0
- data/test/bus_driver_test.rb +22 -0
- data/test/dbus-launch-simple +35 -0
- data/test/dbus-limited-session.conf +28 -0
- data/test/property_test.rb +55 -0
- data/test/server_robustness_test.rb +72 -0
- data/test/server_test.rb +53 -0
- data/test/service_newapi.rb +197 -0
- data/test/session_bus_test_manual.rb +20 -0
- data/test/signal_test.rb +64 -0
- data/test/t1 +4 -0
- data/test/t2.rb +66 -0
- data/test/t3-ticket27.rb +18 -0
- data/test/t5-report-dbus-interface.rb +58 -0
- data/test/t6-loop.rb +82 -0
- data/test/test_env +13 -0
- data/test/test_server +39 -0
- data/test/variant_test.rb +66 -0
- metadata +118 -0
    
        data/test/t6-loop.rb
    ADDED
    
    | @@ -0,0 +1,82 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # Test the main loop
         | 
| 3 | 
            +
            require "test/unit"
         | 
| 4 | 
            +
            require "dbus"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            def d(msg)
         | 
| 7 | 
            +
              puts "#{$$} #{msg}" if $DEBUG
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            class MainLoopTest < Test::Unit::TestCase
         | 
| 11 | 
            +
              def setup
         | 
| 12 | 
            +
                @session_bus = DBus::ASessionBus.new
         | 
| 13 | 
            +
                svc = @session_bus.service("org.ruby.service")
         | 
| 14 | 
            +
                @obj = svc.object("/org/ruby/MyInstance")
         | 
| 15 | 
            +
                @obj.introspect                  # necessary
         | 
| 16 | 
            +
                @obj.default_iface = "org.ruby.Loop"
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                @loop = DBus::Main.new
         | 
| 19 | 
            +
                @loop << @session_bus
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
              # Hack the library internals so that there is a delay between
         | 
| 23 | 
            +
              # sending a DBus call and listening for its reply, so that
         | 
| 24 | 
            +
              # the bus has a chance to join the server messages and a race is reproducible
         | 
| 25 | 
            +
              def call_lazily
         | 
| 26 | 
            +
                class << @session_bus
         | 
| 27 | 
            +
                  alias :wait_for_message_orig :wait_for_message
         | 
| 28 | 
            +
                  def wait_for_message_lazy
         | 
| 29 | 
            +
                    d "I am so lazy"
         | 
| 30 | 
            +
                    sleep 1    # Give the server+bus a chance to join the messages
         | 
| 31 | 
            +
                    wait_for_message_orig
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                  alias :wait_for_message :wait_for_message_lazy
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                yield
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                # undo
         | 
| 39 | 
            +
                class << @session_bus
         | 
| 40 | 
            +
                  remove_method :wait_for_message
         | 
| 41 | 
            +
                  remove_method :wait_for_message_lazy
         | 
| 42 | 
            +
                  alias :wait_for_message :wait_for_message_orig
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              def test_loop_quit(delay = 1)
         | 
| 47 | 
            +
                @obj.on_signal "LongTaskEnd" do
         | 
| 48 | 
            +
                  d "Telling loop to quit"
         | 
| 49 | 
            +
                  @loop.quit
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                call_lazily do
         | 
| 53 | 
            +
                  # The method will sleep the requested amount of seconds
         | 
| 54 | 
            +
                  # (in another thread)  before signalling LongTaskEnd
         | 
| 55 | 
            +
                  @obj.LongTaskBegin delay
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                # this thread will make the test fail if @loop.run does not return
         | 
| 59 | 
            +
                dynamite = Thread.new do
         | 
| 60 | 
            +
                  d "Dynamite burning"
         | 
| 61 | 
            +
                  sleep 2
         | 
| 62 | 
            +
                  d "Dynamite explodes"
         | 
| 63 | 
            +
                  # We need to raise in the main thread.
         | 
| 64 | 
            +
                  # Simply raising here means the exception is ignored
         | 
| 65 | 
            +
                  # (until dynamite.join which we don't call) or
         | 
| 66 | 
            +
                  # (if abort_on_exception is set) it terminates the whole script.
         | 
| 67 | 
            +
                  Thread.main.raise RuntimeError, "The main loop did not quit in time"
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                @loop.run
         | 
| 71 | 
            +
                d "Defusing dynamite"
         | 
| 72 | 
            +
                # if we get here, defuse the bomb
         | 
| 73 | 
            +
                dynamite.exit
         | 
| 74 | 
            +
                # remove signal handler
         | 
| 75 | 
            +
                @obj.on_signal "LongTaskEnd"
         | 
| 76 | 
            +
              end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
              # https://bugzilla.novell.com/show_bug.cgi?id=537401
         | 
| 79 | 
            +
              def test_loop_drained_socket
         | 
| 80 | 
            +
                test_loop_quit 0
         | 
| 81 | 
            +
              end
         | 
| 82 | 
            +
            end
         | 
    
        data/test/test_env
    ADDED
    
    | @@ -0,0 +1,13 @@ | |
| 1 | 
            +
            #! /bin/bash
         | 
| 2 | 
            +
            # test_env: set up the environment needed to run tests:
         | 
| 3 | 
            +
            # - set up a private bus
         | 
| 4 | 
            +
            # - run a test server on it
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            #export DBUS_VERBOSE=1
         | 
| 7 | 
            +
            #export RUBYOPT="-d"
         | 
| 8 | 
            +
            export RUBYOPT="$RUBYOPT -w"
         | 
| 9 | 
            +
            ./test_server \
         | 
| 10 | 
            +
            	./service_newapi.rb \
         | 
| 11 | 
            +
            	-- \
         | 
| 12 | 
            +
            	./dbus-launch-simple \
         | 
| 13 | 
            +
            	"$@"
         | 
    
        data/test/test_server
    ADDED
    
    | @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            #! /bin/sh
         | 
| 2 | 
            +
            # A wrapper for DBus tests
         | 
| 3 | 
            +
            # Run a server (directly or by dbus activation) and then the test
         | 
| 4 | 
            +
            # $0 server [args...] -- test [args...]
         | 
| 5 | 
            +
            set -o errexit
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            while [ "$1" != "--" ]; do
         | 
| 8 | 
            +
              SERVER="$SERVER $1"
         | 
| 9 | 
            +
              shift
         | 
| 10 | 
            +
            done
         | 
| 11 | 
            +
            shift # --
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            setup_activation () {
         | 
| 14 | 
            +
                SDIR=$XDG_DATA_DIRS/dbus-1/services
         | 
| 15 | 
            +
                mkdir -p $SDIR
         | 
| 16 | 
            +
                # FIXME Name is hardcoded
         | 
| 17 | 
            +
                cat <<EOF > $SDIR/test.service
         | 
| 18 | 
            +
            [D-BUS Service]
         | 
| 19 | 
            +
            Name=org.ruby.service
         | 
| 20 | 
            +
            Exec=$SERVER
         | 
| 21 | 
            +
            EOF
         | 
| 22 | 
            +
            }
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            run_server () {
         | 
| 25 | 
            +
                echo -n "Hey, server, get on da bus... "
         | 
| 26 | 
            +
                # start the server
         | 
| 27 | 
            +
                $SERVER & sleep 3
         | 
| 28 | 
            +
                echo "off we go!"
         | 
| 29 | 
            +
            }
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            export XDG_DATA_DIRS=`mktemp -d dbus.activation.XXXXXX`
         | 
| 32 | 
            +
            RM_FILES="$RM_FILES $XDG_DATA_DIRS"
         | 
| 33 | 
            +
            setup_activation
         | 
| 34 | 
            +
            #run_server
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            # Clean up at exit.
         | 
| 37 | 
            +
            trap "rm -rf \$RM_FILES" EXIT TERM INT
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            "$@"
         | 
| @@ -0,0 +1,66 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
            # Test marshalling variants according to ruby types
         | 
| 3 | 
            +
            require "test/unit"
         | 
| 4 | 
            +
            require "dbus"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            class VariantTest < Test::Unit::TestCase
         | 
| 7 | 
            +
              def setup
         | 
| 8 | 
            +
                @bus = DBus::ASessionBus.new
         | 
| 9 | 
            +
                @svc = @bus.service("org.ruby.service")
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def make_variant(a)
         | 
| 13 | 
            +
                DBus::PacketMarshaller.make_variant(a)
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def test_make_variant_scalar
         | 
| 17 | 
            +
                # special case: do not fail immediately, marshaller will do that
         | 
| 18 | 
            +
                assert_equal ["b", nil], make_variant(nil)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                assert_equal ["b", true], make_variant(true)
         | 
| 21 | 
            +
                # Integers
         | 
| 22 | 
            +
                # no byte
         | 
| 23 | 
            +
                assert_equal ["i", 42], make_variant(42)
         | 
| 24 | 
            +
                # 3_000_000_000 can be u or x.
         | 
| 25 | 
            +
                # less specific test: just run it thru a loopback
         | 
| 26 | 
            +
                assert_equal ["x", 3_000_000_000], make_variant(3_000_000_000)
         | 
| 27 | 
            +
                assert_equal ["x", 5_000_000_000], make_variant(5_000_000_000)
         | 
| 28 | 
            +
             
         | 
| 29 | 
            +
                assert_equal ["d", 3.14], make_variant(3.14)
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                assert_equal ["s", "foo"], make_variant("foo")
         | 
| 32 | 
            +
                assert_equal ["s", "bar"], make_variant(:bar)
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                # left: strruct, array, dict
         | 
| 35 | 
            +
                # object path: detect exported objects?, signature
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            #    # by Ruby types
         | 
| 38 | 
            +
            #    class Foo
         | 
| 39 | 
            +
            #    end
         | 
| 40 | 
            +
            #    make_variant(Foo.new)
         | 
| 41 | 
            +
            # if we don;t understand a class, the error should be informative -> new exception
         | 
| 42 | 
            +
              end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
              def test_make_variant_array
         | 
| 45 | 
            +
                ai = [1, 2, 3]
         | 
| 46 | 
            +
            #    as = ["one", "two", "three"]
         | 
| 47 | 
            +
               # which?
         | 
| 48 | 
            +
            #    assert_equal ["ai", [1, 2, 3]], make_variant(ai)
         | 
| 49 | 
            +
                assert_equal ["av", [["i", 1],
         | 
| 50 | 
            +
                                     ["i", 2],
         | 
| 51 | 
            +
                                     ["i", 3]]], make_variant(ai)
         | 
| 52 | 
            +
                a0 = []
         | 
| 53 | 
            +
                assert_equal ["av", []], make_variant(a0)
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
              def test_make_variant_hash
         | 
| 58 | 
            +
                h = {"k1" => "v1", "k2" => "v2"}
         | 
| 59 | 
            +
                assert_equal ["a{sv}", {
         | 
| 60 | 
            +
                                "k1" => ["s", "v1"],
         | 
| 61 | 
            +
                                "k2" => ["s", "v2"],
         | 
| 62 | 
            +
                              }], make_variant(h)
         | 
| 63 | 
            +
                h0 = {}
         | 
| 64 | 
            +
                assert_equal ["a{sv}", {}], make_variant(h0)
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,118 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: ruby-dbus-openplacos
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              hash: 7
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 | 
            +
              segments: 
         | 
| 7 | 
            +
              - 0
         | 
| 8 | 
            +
              - 6
         | 
| 9 | 
            +
              - 0
         | 
| 10 | 
            +
              version: 0.6.0
         | 
| 11 | 
            +
            platform: ruby
         | 
| 12 | 
            +
            authors: 
         | 
| 13 | 
            +
            - Openplacos Team
         | 
| 14 | 
            +
            autorequire: 
         | 
| 15 | 
            +
            bindir: bin
         | 
| 16 | 
            +
            cert_chain: []
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            date: 2011-02-24 00:00:00 +01:00
         | 
| 19 | 
            +
            default_executable: 
         | 
| 20 | 
            +
            dependencies: []
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            description: 
         | 
| 23 | 
            +
            email: 
         | 
| 24 | 
            +
            executables: []
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            extensions: []
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            extra_rdoc_files: 
         | 
| 29 | 
            +
            - COPYING
         | 
| 30 | 
            +
            - README
         | 
| 31 | 
            +
            - NEWS
         | 
| 32 | 
            +
            files: 
         | 
| 33 | 
            +
            - Rakefile
         | 
| 34 | 
            +
            - VERSION
         | 
| 35 | 
            +
            - doc/tutorial/index.markdown
         | 
| 36 | 
            +
            - examples/gdbus/gdbus
         | 
| 37 | 
            +
            - examples/gdbus/gdbus.glade
         | 
| 38 | 
            +
            - examples/gdbus/launch.sh
         | 
| 39 | 
            +
            - examples/no-introspect/nm-test.rb
         | 
| 40 | 
            +
            - examples/no-introspect/tracker-test.rb
         | 
| 41 | 
            +
            - examples/rhythmbox/playpause.rb
         | 
| 42 | 
            +
            - examples/service/call_service.rb
         | 
| 43 | 
            +
            - examples/service/service_newapi.rb
         | 
| 44 | 
            +
            - examples/simple/call_introspect.rb
         | 
| 45 | 
            +
            - examples/simple/properties.rb
         | 
| 46 | 
            +
            - examples/utils/listnames.rb
         | 
| 47 | 
            +
            - examples/utils/notify.rb
         | 
| 48 | 
            +
            - lib/dbus.rb
         | 
| 49 | 
            +
            - lib/dbus/auth.rb
         | 
| 50 | 
            +
            - lib/dbus/bus.rb
         | 
| 51 | 
            +
            - lib/dbus/core_ext/class/attribute.rb
         | 
| 52 | 
            +
            - lib/dbus/core_ext/kernel/singleton_class.rb
         | 
| 53 | 
            +
            - lib/dbus/core_ext/module/remove_method.rb
         | 
| 54 | 
            +
            - lib/dbus/error.rb
         | 
| 55 | 
            +
            - lib/dbus/export.rb
         | 
| 56 | 
            +
            - lib/dbus/introspect.rb
         | 
| 57 | 
            +
            - lib/dbus/marshall.rb
         | 
| 58 | 
            +
            - lib/dbus/matchrule.rb
         | 
| 59 | 
            +
            - lib/dbus/message.rb
         | 
| 60 | 
            +
            - lib/dbus/type.rb
         | 
| 61 | 
            +
            - ruby-dbus-openplacos.gemspec
         | 
| 62 | 
            +
            - test/binding_test.rb
         | 
| 63 | 
            +
            - test/bus_driver_test.rb
         | 
| 64 | 
            +
            - test/dbus-launch-simple
         | 
| 65 | 
            +
            - test/dbus-limited-session.conf
         | 
| 66 | 
            +
            - test/property_test.rb
         | 
| 67 | 
            +
            - test/server_robustness_test.rb
         | 
| 68 | 
            +
            - test/server_test.rb
         | 
| 69 | 
            +
            - test/service_newapi.rb
         | 
| 70 | 
            +
            - test/session_bus_test_manual.rb
         | 
| 71 | 
            +
            - test/signal_test.rb
         | 
| 72 | 
            +
            - test/t1
         | 
| 73 | 
            +
            - test/t2.rb
         | 
| 74 | 
            +
            - test/t3-ticket27.rb
         | 
| 75 | 
            +
            - test/t5-report-dbus-interface.rb
         | 
| 76 | 
            +
            - test/t6-loop.rb
         | 
| 77 | 
            +
            - test/test_env
         | 
| 78 | 
            +
            - test/test_server
         | 
| 79 | 
            +
            - test/variant_test.rb
         | 
| 80 | 
            +
            - COPYING
         | 
| 81 | 
            +
            - README
         | 
| 82 | 
            +
            - NEWS
         | 
| 83 | 
            +
            has_rdoc: true
         | 
| 84 | 
            +
            homepage: https://github.com/flagos/ruby-dbus
         | 
| 85 | 
            +
            licenses: []
         | 
| 86 | 
            +
             | 
| 87 | 
            +
            post_install_message: 
         | 
| 88 | 
            +
            rdoc_options: []
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            require_paths: 
         | 
| 91 | 
            +
            - lib
         | 
| 92 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 93 | 
            +
              none: false
         | 
| 94 | 
            +
              requirements: 
         | 
| 95 | 
            +
              - - ">="
         | 
| 96 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 97 | 
            +
                  hash: 3
         | 
| 98 | 
            +
                  segments: 
         | 
| 99 | 
            +
                  - 0
         | 
| 100 | 
            +
                  version: "0"
         | 
| 101 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 102 | 
            +
              none: false
         | 
| 103 | 
            +
              requirements: 
         | 
| 104 | 
            +
              - - ">="
         | 
| 105 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 106 | 
            +
                  hash: 3
         | 
| 107 | 
            +
                  segments: 
         | 
| 108 | 
            +
                  - 0
         | 
| 109 | 
            +
                  version: "0"
         | 
| 110 | 
            +
            requirements: []
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            rubyforge_project: 
         | 
| 113 | 
            +
            rubygems_version: 1.4.1
         | 
| 114 | 
            +
            signing_key: 
         | 
| 115 | 
            +
            specification_version: 3
         | 
| 116 | 
            +
            summary: Fork from ruby-dbus
         | 
| 117 | 
            +
            test_files: []
         | 
| 118 | 
            +
             |