Example #1
0
    def testComponentWithFeeders(self):
        c1 = Component()
        c1.name = 'name'
        c1.componentType = 'first'
        c1.worker = 'worker'
        c2 = Component()
        c2.name = 'name'
        c2.componentType = 'second'
        c2.worker = 'worker'
        c2.link(c1)

        writer = ConfigurationWriter('flow', [c1, c2], [])
        testsuite.diffStrings(
            ('<planet>\n'
             '  <flow name="flow">\n'
             '    <component name="name"\n'
             '               type="first"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>name</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="name"\n'
             '               type="second"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            writer.getXML())
Example #2
0
 def testComponentWithPlug(self):
     c = Component()
     c.name = 'name'
     c.componentType = 'streamer'
     c.worker = 'worker'
     plug = Plug()
     plug.plugType = 'plug-type'
     plug.properties.foo = 'bar'
     c.plugs.append(plug)
     writer = ConfigurationWriter('flow', [c], [])
     testsuite.diffStrings(
         ('<planet>\n'
          '  <flow name="flow">\n'
          '    <component name="name"\n'
          '               type="streamer"\n'
          '               project="flumotion"\n'
          '               worker="worker"\n'
          '               version="%(version)s">\n'
          '      \n'
          '      <plugs>\n'
          '        <plug type="plug-type">\n'
          '          \n'
          '          <property name="foo">bar</property>\n'
          '        </plug>\n'
          '      </plugs>\n'
          '    </component>\n'
          '  </flow>\n'
          '</planet>\n' % dict(version=configure.version)),
         writer.getXML())
Example #3
0
 def testEmpty(self):
     writer = ConfigurationWriter('', [], [])
     testsuite.diffStrings(
         XMLWriter.encoding + \
         ("<planet>\n"
          "</planet>\n"),
         writer.getXML())
 def testPlug(self):
     xml = (
         '<planet name="planet-name">\n'
         '  \n'
         '  <atmosphere>\n'
         '    <component name="server"\n'
         '               type="http-server"\n'
         '               label="label"\n'
         '               worker="worker"\n'
         '               project="flumotion"\n'
         '               version="1.0.0">\n'
         '      <property name="type">slave</property>\n'
         '      <plugs>\n'
         '        <plug type="requestlogger-file">\n'
         '          <property name="logfile">foobar</property>\n'
         '        </plug>\n'
         '      </plugs>\n'
         '    </component>\n'
         '    \n'
         '  </atmosphere>\n'
         '  \n'
         '</planet>\n')
     vishnu = Vishnu('planet-name')
     vishnu.loadComponentConfigurationXML(StringIO(xml), 'foo')
     testsuite.diffStrings(XMLWriter.encoding + xml,
                           vishnu.getConfiguration())
Example #5
0
    def testComponentWithFeeders(self):
        c1 = Component()
        c1.name = 'name'
        c1.componentType = 'first'
        c1.worker = 'worker'
        c2 = Component()
        c2.name = 'name'
        c2.componentType = 'second'
        c2.worker = 'worker'
        c2.link(c1)

        writer = ConfigurationWriter('flow', [c1, c2], [])
        testsuite.diffStrings(
            XMLWriter.encoding + \
            ('<planet>\n'
             '  <flow name="flow">\n'
             '    <component name="name"\n'
             '               type="first"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>name</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="name"\n'
             '               type="second"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            writer.getXML())
Example #6
0
 def testPlug(self):
     xml = (
         '<planet name="planet-name">\n'
         '  \n'
         '  <atmosphere>\n'
         '    <component name="server"\n'
         '               type="http-server"\n'
         '               label="label"\n'
         '               worker="worker"\n'
         '               project="flumotion"\n'
         '               version="1.0.0">\n'
         '      <property name="type">slave</property>\n'
         '      <plugs>\n'
         '        <plug type="requestlogger-file">\n'
         '          <property name="logfile">foobar</property>\n'
         '        </plug>\n'
         '      </plugs>\n'
         '    </component>\n'
         '    \n'
         '  </atmosphere>\n'
         '  \n'
         '</planet>\n')
     vishnu = Vishnu('planet-name')
     vishnu.loadComponentConfigurationXML(StringIO(xml), 'foo')
     testsuite.diffStrings(XMLWriter.encoding + xml,
                           vishnu.getConfiguration())
 def testEmpty(self):
     writer = ConfigurationWriter('', [], [])
     testsuite.diffStrings(
         XMLWriter.encoding + \
         ("<planet>\n"
          "</planet>\n"),
         writer.getXML())
Example #8
0
 def testComponentWithPlug(self):
     c = Component()
     c.name = 'name'
     c.componentType = 'streamer'
     c.worker = 'worker'
     plug = Plug()
     plug.plugType = 'plug-type'
     plug.properties.foo = 'bar'
     c.plugs.append(plug)
     writer = ConfigurationWriter('flow', [c], [])
     testsuite.diffStrings(
         XMLWriter.encoding + \
         ('<planet>\n'
          '  <flow name="flow">\n'
          '    <component name="name"\n'
          '               type="streamer"\n'
          '               project="flumotion"\n'
          '               worker="worker"\n'
          '               version="%(version)s">\n'
          '      \n'
          '      <plugs>\n'
          '        <plug type="plug-type">\n'
          '          \n'
          '          <property name="foo">bar</property>\n'
          '        </plug>\n'
          '      </plugs>\n'
          '    </component>\n'
          '  </flow>\n'
          '</planet>\n' % dict(version=configure.version)),
         writer.getXML())
Example #9
0
    def _compareRegistryAfterDump(self, orig, expected, name=''):
        reg = registry.ComponentRegistry(paths=[])
        reg.clean()
        reg.addFromString(orig)
        s = StringIO.StringIO()
        reg.dump(s)
        s.seek(0, 0)
        data = s.read()

        testsuite.diffStrings(data, expected, desc=name)
Example #10
0
    def _compareRegistryAfterDump(self, orig, expected, name=''):
        reg = registry.ComponentRegistry(paths=[])
        reg.clean()
        reg.addFromString(orig)
        s = StringIO.StringIO()
        reg.dump(s)
        s.seek(0, 0)
        data = s.read()

        testsuite.diffStrings(data, expected, desc=name)
Example #11
0
 def testFlowComponent(self):
     c = Component()
     c.name = 'name'
     c.componentType = 'streamer'
     c.worker = 'worker'
     writer = ConfigurationWriter('flow', [c], [])
     testsuite.diffStrings(
         ('<planet>\n'
          '  <flow name="flow">\n'
          '    <component name="name"\n'
          '               type="streamer"\n'
          '               project="flumotion"\n'
          '               worker="worker"\n'
          '               version="%(version)s">\n'
          '    </component>\n'
          '  </flow>\n'
          '</planet>\n' % dict(version=configure.version)),
         writer.getXML())
Example #12
0
 def testFlowComponent(self):
     c = Component()
     c.name = 'name'
     c.componentType = 'streamer'
     c.worker = 'worker'
     writer = ConfigurationWriter('flow', [c], [])
     testsuite.diffStrings(
         XMLWriter.encoding + \
         ('<planet>\n'
          '  <flow name="flow">\n'
          '    <component name="name"\n'
          '               type="streamer"\n'
          '               project="flumotion"\n'
          '               worker="worker"\n'
          '               version="%(version)s">\n'
          '    </component>\n'
          '  </flow>\n'
          '</planet>\n' % dict(version=configure.version)),
         writer.getXML())
Example #13
0
 def testMultiple(self):
     xml = (
         '<planet name="planet-name">\n'
         '  \n'
         '  <atmosphere>\n'
         '    <component name="bouncer"\n'
         '               type="ip-bouncer"\n'
         '               label="label"\n'
         '               worker="worker"\n'
         '               project="flumotion"\n'
         '               version="1.0.0">\n'
         '      <property name="allow">A</property>\n'
         '      <property name="allow">B</property>\n'
         '    </component>\n'
         '    \n'
         '  </atmosphere>\n'
         '  \n'
         '</planet>\n')
     vishnu = Vishnu('planet-name')
     vishnu.loadComponentConfigurationXML(StringIO(xml), 'foo')
     testsuite.diffStrings(xml, vishnu.getConfiguration())
Example #14
0
    def testOndemand(self):
        save = AssistantSaver()

        server = HTTPServer('ondemand-server-worker', '/mount-point/')
        save.addServerConsumer(server, 'ondemand')

        configuration = save.getXML()
        testsuite.diffStrings(
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="http-server-ondemand"\n'
             '               type="http-server"\n'
             '               project="flumotion"\n'
             '               worker="ondemand-server-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="mount-point">/mount-point/</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #15
0
 def testMultiple(self):
     xml = ('<planet name="planet-name">\n'
            '  \n'
            '  <atmosphere>\n'
            '    <component name="bouncer"\n'
            '               type="ip-bouncer"\n'
            '               label="label"\n'
            '               worker="worker"\n'
            '               project="flumotion"\n'
            '               version="1.0.0">\n'
            '      <property name="allow">A</property>\n'
            '      <property name="allow">B</property>\n'
            '    </component>\n'
            '    \n'
            '  </atmosphere>\n'
            '  \n'
            '</planet>\n')
     vishnu = Vishnu('planet-name')
     vishnu.loadComponentConfigurationXML(StringIO(xml), 'foo')
     testsuite.diffStrings(XMLWriter.encoding + xml,
                           vishnu.getConfiguration())
Example #16
0
 def testAtmosphereComponent(self):
     c = Component()
     c.name = 'name'
     c.componentType = 'streamer'
     c.worker = 'worker'
     c.properties.foo = 'bar'
     writer = ConfigurationWriter('', [], [c])
     testsuite.diffStrings(
         ('<planet>\n'
          '  <atmosphere>\n'
          '    <component name="name"\n'
          '               type="streamer"\n'
          '               project="flumotion"\n'
          '               worker="worker"\n'
          '               version="%(version)s">\n'
          '      \n'
          '      <property name="foo">bar</property>\n'
          '    </component>\n'
          '  </atmosphere>\n'
          '</planet>\n' % dict(version=configure.version)),
         writer.getXML())
Example #17
0
 def testAtmosphereComponent(self):
     c = Component()
     c.name = 'name'
     c.componentType = 'streamer'
     c.worker = 'worker'
     c.properties.foo = 'bar'
     writer = ConfigurationWriter('', [], [c])
     testsuite.diffStrings(
         XMLWriter.encoding + \
         ('<planet>\n'
          '  <atmosphere>\n'
          '    <component name="name"\n'
          '               type="streamer"\n'
          '               project="flumotion"\n'
          '               worker="worker"\n'
          '               version="%(version)s">\n'
          '      \n'
          '      <property name="foo">bar</property>\n'
          '    </component>\n'
          '  </atmosphere>\n'
          '</planet>\n' % dict(version=configure.version)),
         writer.getXML())
Example #18
0
    def testOndemand(self):
        save = AssistantSaver()

        server = HTTPServer('ondemand-server-worker', '/mount-point/')
        save.addServerConsumer(server, 'ondemand')

        configuration = save.getXML()
        testsuite.diffStrings(
            XMLWriter.encoding + \
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="http-server-ondemand"\n'
             '               type="http-server"\n'
             '               project="flumotion"\n'
             '               worker="ondemand-server-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="mount-point">/mount-point/</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #19
0
    def testAudioOnlyStream(self):
        save = AssistantSaver()
        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')
        save.setFlowName('flow')

        audioProducer = TestAudioProducer()
        audioProducer.worker = 'worker'
        save.setAudioProducer(audioProducer)

        audioEncoder = VorbisAudioEncoder()
        audioEncoder.worker = 'worker'
        save.setAudioEncoder(audioEncoder)

        videoProducer = self._createVideoEncoder()
        self.assertRaises(ValueError, save.setVideoOverlay,
                          self._createVideoOverlay(videoProducer))

        save.setMuxer('ogg-muxer', 'muxer')

        streamer = self._createHTTPStreamer()
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio')

        configuration = save.getXML()
        testsuite.diffStrings(
            XMLWriter.encoding + \
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio"\n'
             '               type="audiotest-producer"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="samplerate">44100</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="vorbis-encoder"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bitrate">64000</property>\n'
             '    </component>\n'
             '    <component name="muxer-audio"\n'
             '               type="ogg-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #20
0
    def testMultiFeedProducer(self):
        save = AssistantSaver()
        save.setFlowName('flow')

        save.setAudioProducer(
            self._createAudioProducer(worker='both-producer-worker',
                                      componentType='both-producer'))
        save.setVideoProducer(
            self._createVideoProducer(componentType='both-producer',
                                      worker='both-producer-worker'))

        save.setAudioEncoder(self._createAudioEncoder())
        save.setVideoEncoder(self._createVideoEncoder())

        save.setMuxer('default-muxer', 'muxer-worker')

        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')

        streamer = self._createHTTPStreamer()
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio-video')

        configuration = save.getXML()
        testsuite.diffStrings(
            XMLWriter.encoding + \
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio-video"\n'
             '               type="both-producer"\n'
             '               project="flumotion"\n'
             '               worker="both-producer-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="height">480</property>\n'
             '      <property name="width">640</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="audio-encoder"\n'
             '               project="flumotion"\n'
             '               worker="audio-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="encoder-video"\n'
             '               type="video-encoder"\n'
             '               project="flumotion"\n'
             '               worker="video-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="muxer-audio-video"\n'
             '               type="default-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '        <feed>encoder-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio-video"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #21
0
    def testFirewireStreamerDifferentWorkers(self):
        save = AssistantSaver()
        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')
        save.setFlowName('flow')

        audioProducer = self._createFirewireProducer()
        audioProducer.worker = 'audio-worker'
        save.setAudioProducer(audioProducer)
        videoProducer = self._createFirewireProducer()
        videoProducer.worker = 'video-worker'
        save.setVideoProducer(videoProducer)
        save.setVideoOverlay(self._createVideoOverlay(videoProducer))
        save.setAudioEncoder(self._createAudioEncoder())
        save.setVideoEncoder(self._createVideoEncoder())

        save.setMuxer('default-muxer', 'muxer-worker')

        streamer = self._createHTTPStreamer()
        streamer.has_bandwidth_limit = True
        streamer.bandwidth_limit = 123
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio-video')

        server = HTTPServer('server-worker', '/mount/')
        save.addServerConsumer(server, 'audio-video')

        save.setUseCCLicense(True)

        configuration = save.getXML()
        testsuite.diffStrings(
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="http-server-audio-video"\n'
             '               type="http-server"\n'
             '               project="flumotion"\n'
             '               worker="server-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="mount-point">/mount/</property>\n'
             '    </component>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio"\n'
             '               type="firewire-producer"\n'
             '               project="flumotion"\n'
             '               worker="audio-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="framerate">25/2</property>\n'
             '      <property name="height">480</property>\n'
             '      <property name="is-square">True</property>\n'
             '      <property name="width">640</property>\n'
             '    </component>\n'
             '    <component name="producer-video"\n'
             '               type="firewire-producer"\n'
             '               project="flumotion"\n'
             '               worker="video-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="framerate">25/2</property>\n'
             '      <property name="height">480</property>\n'
             '      <property name="is-square">True</property>\n'
             '      <property name="width">640</property>\n'
             '    </component>\n'
             '    <component name="overlay-video"\n'
             '               type="overlay-converter"\n'
             '               project="flumotion"\n'
             '               worker="overlay-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-video:video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="cc-logo">True</property>\n'
             '      <property name="fluendo-logo">True</property>\n'
             '      <property name="height">480</property>\n'
             '      <property name="show-text">True</property>\n'
             '      <property name="text">Flumotion</property>\n'
             '      <property name="width">640</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="audio-encoder"\n'
             '               project="flumotion"\n'
             '               worker="audio-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio:audio</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="encoder-video"\n'
             '               type="video-encoder"\n'
             '               project="flumotion"\n'
             '               worker="video-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>overlay-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="muxer-audio-video"\n'
             '               type="default-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '        <feed>encoder-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio-video"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bandwidth-limit">123000000</property>\n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #22
0
    def testAudioOnlyStream(self):
        save = AssistantSaver()
        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')
        save.setFlowName('flow')

        audioProducer = TestAudioProducer()
        audioProducer.worker = 'worker'
        save.setAudioProducer(audioProducer)

        audioEncoder = VorbisAudioEncoder()
        audioEncoder.worker = 'worker'
        save.setAudioEncoder(audioEncoder)

        videoProducer = self._createVideoEncoder()
        self.assertRaises(ValueError, save.setVideoOverlay,
                          self._createVideoOverlay(videoProducer))

        save.setMuxer('ogg-muxer', 'muxer')

        streamer = self._createHTTPStreamer()
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio')

        configuration = save.getXML()
        testsuite.diffStrings(
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio"\n'
             '               type="audiotest-producer"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="samplerate">44100</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="vorbis-encoder"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bitrate">64000</property>\n'
             '    </component>\n'
             '    <component name="muxer-audio"\n'
             '               type="ogg-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #23
0
    def testOggStream(self):
        save = AssistantSaver()
        save.setFlowName('flow')

        audioProducer = TestAudioProducer()
        audioProducer.worker = 'worker'
        save.setAudioProducer(audioProducer)
        videoProducer = TestVideoProducer()
        videoProducer.worker = 'worker'
        videoProducer.properties.width = 320
        videoProducer.properties.height = 240
        save.setVideoProducer(videoProducer)

        save.setVideoOverlay(self._createVideoOverlay(videoProducer))

        audioEncoder = VorbisAudioEncoder()
        audioEncoder.worker = 'worker'
        save.setAudioEncoder(audioEncoder)
        videoEncoder = TheoraVideoEncoder()
        videoEncoder.worker = 'worker'
        save.setVideoEncoder(videoEncoder)

        save.setMuxer('ogg-muxer', 'muxer-worker')

        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')
        streamer = self._createHTTPStreamer()
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio-video')

        configuration = save.getXML()
        testsuite.diffStrings(
            XMLWriter.encoding + \
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio"\n'
             '               type="audiotest-producer"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="samplerate">44100</property>\n'
             '    </component>\n'
             '    <component name="producer-video"\n'
             '               type="videotest-producer"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="height">240</property>\n'
             '      <property name="pattern">0</property>\n'
             '      <property name="width">320</property>\n'
             '    </component>\n'
             '    <component name="overlay-video"\n'
             '               type="overlay-converter"\n'
             '               project="flumotion"\n'
             '               worker="overlay-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="fluendo-logo">True</property>\n'
             '      <property name="show-text">True</property>\n'
             '      <property name="text">Flumotion</property>\n'
             '      <property name="xiph-logo">True</property>\n'
             '    </component>\n'
             '    <component name="encoder-video"\n'
             '               type="theora-encoder"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>overlay-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bitrate">400000</property>\n'
             '      <property name="keyframe-maxdistance">50</property>\n'
             '      <property name="speed">3</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="vorbis-encoder"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bitrate">64000</property>\n'
             '    </component>\n'
             '    <component name="muxer-audio-video"\n'
             '               type="ogg-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '        <feed>encoder-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio-video"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #24
0
    def testOggStream(self):
        save = AssistantSaver()
        save.setFlowName('flow')

        audioProducer = TestAudioProducer()
        audioProducer.worker = 'worker'
        save.setAudioProducer(audioProducer)
        videoProducer = TestVideoProducer()
        videoProducer.worker = 'worker'
        videoProducer.properties.width = 320
        videoProducer.properties.height = 240
        save.setVideoProducer(videoProducer)

        save.setVideoOverlay(self._createVideoOverlay(videoProducer))

        audioEncoder = VorbisAudioEncoder()
        audioEncoder.worker = 'worker'
        save.setAudioEncoder(audioEncoder)
        videoEncoder = TheoraVideoEncoder()
        videoEncoder.worker = 'worker'
        save.setVideoEncoder(videoEncoder)

        save.setMuxer('ogg-muxer', 'muxer-worker')

        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')
        streamer = self._createHTTPStreamer()
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio-video')

        configuration = save.getXML()
        testsuite.diffStrings(
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio"\n'
             '               type="audiotest-producer"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="samplerate">44100</property>\n'
             '    </component>\n'
             '    <component name="producer-video"\n'
             '               type="videotest-producer"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="height">240</property>\n'
             '      <property name="pattern">0</property>\n'
             '      <property name="width">320</property>\n'
             '    </component>\n'
             '    <component name="overlay-video"\n'
             '               type="overlay-converter"\n'
             '               project="flumotion"\n'
             '               worker="overlay-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="fluendo-logo">True</property>\n'
             '      <property name="height">240</property>\n'
             '      <property name="show-text">True</property>\n'
             '      <property name="text">Flumotion</property>\n'
             '      <property name="width">320</property>\n'
             '      <property name="xiph-logo">True</property>\n'
             '    </component>\n'
             '    <component name="encoder-video"\n'
             '               type="theora-encoder"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>overlay-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bitrate">400000</property>\n'
             '      <property name="keyframe-maxdistance">50</property>\n'
             '      <property name="noise-sensitivity">1</property>\n'
             '      <property name="sharpness">0</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="vorbis-encoder"\n'
             '               project="flumotion"\n'
             '               worker="worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bitrate">64000</property>\n'
             '    </component>\n'
             '    <component name="muxer-audio-video"\n'
             '               type="ogg-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '        <feed>encoder-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio-video"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
Example #25
0
    def testMultiFeedProducer(self):
        save = AssistantSaver()
        save.setFlowName('flow')

        save.setAudioProducer(self._createAudioProducer(
            worker='both-producer-worker',
            componentType='both-producer'))
        save.setVideoProducer(self._createVideoProducer(
            componentType='both-producer',
            worker='both-producer-worker'))

        save.setAudioEncoder(self._createAudioEncoder())
        save.setVideoEncoder(self._createVideoEncoder())

        save.setMuxer('default-muxer', 'muxer-worker')

        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')

        streamer = self._createHTTPStreamer()
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio-video')

        configuration = save.getXML()
        testsuite.diffStrings(
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio-video"\n'
             '               type="both-producer"\n'
             '               project="flumotion"\n'
             '               worker="both-producer-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="height">480</property>\n'
             '      <property name="width">640</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="audio-encoder"\n'
             '               project="flumotion"\n'
             '               worker="audio-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="encoder-video"\n'
             '               type="video-encoder"\n'
             '               project="flumotion"\n'
             '               worker="video-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="muxer-audio-video"\n'
             '               type="default-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '        <feed>encoder-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio-video"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)
 def gotCortadoHTML(result):
     testsuite.diffStrings('Testing cortado plug', result)
Example #27
0
    def testFirewireStreamerDifferentWorkers(self):
        save = AssistantSaver()
        porter = self._createPorter()
        save.addPorter(porter, 'audio-video')
        save.setFlowName('flow')

        audioProducer = self._createFirewireProducer()
        audioProducer.worker = 'audio-worker'
        save.setAudioProducer(audioProducer)
        videoProducer = self._createFirewireProducer()
        videoProducer.worker = 'video-worker'
        save.setVideoProducer(videoProducer)
        save.setVideoOverlay(self._createVideoOverlay(videoProducer))
        save.setAudioEncoder(self._createAudioEncoder())
        save.setVideoEncoder(self._createVideoEncoder())

        save.setMuxer('default-muxer', 'muxer-worker')

        streamer = self._createHTTPStreamer()
        streamer.has_bandwidth_limit = True
        streamer.bandwidth_limit = 123
        streamer.setPorter(porter)
        save.addConsumer(streamer, 'audio-video')

        server = HTTPServer('server-worker', '/mount/')
        save.addServerConsumer(server, 'audio-video')

        save.setUseCCLicense(True)

        configuration = save.getXML()
        testsuite.diffStrings(
            XMLWriter.encoding + \
            ('<planet>\n'
             '  <atmosphere>\n'
             '    <component name="http-server-audio-video"\n'
             '               type="http-server"\n'
             '               project="flumotion"\n'
             '               worker="server-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="mount-point">/mount/</property>\n'
             '    </component>\n'
             '    <component name="porter-audio-video"\n'
             '               type="porter"\n'
             '               project="flumotion"\n'
             '               worker="porter-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="password">password</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="socket-path">flu-XXXX.socket</property>\n'
             '      <property name="username">username</property>\n'
             '    </component>\n'
             '  </atmosphere>\n'
             '  <flow name="flow">\n'
             '    <component name="producer-audio"\n'
             '               type="firewire-producer"\n'
             '               project="flumotion"\n'
             '               worker="audio-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="decoder">ffdec_dvvideo</property>\n'
           '      <property name="deinterlace-method">ffmpeg</property>\n'
             '      <property name="deinterlace-mode">auto</property>\n'
             '      <property name="framerate">25/2</property>\n'
             '      <property name="height">480</property>\n'
             '      <property name="is-square">True</property>\n'
             '      <property name="width">640</property>\n'
             '    </component>\n'
             '    <component name="producer-video"\n'
             '               type="firewire-producer"\n'
             '               project="flumotion"\n'
             '               worker="video-worker"\n'
             '               version="%(version)s">\n'
             '      \n'
             '      <property name="decoder">ffdec_dvvideo</property>\n'
           '      <property name="deinterlace-method">ffmpeg</property>\n'
             '      <property name="deinterlace-mode">auto</property>\n'
             '      <property name="framerate">25/2</property>\n'
             '      <property name="height">480</property>\n'
             '      <property name="is-square">True</property>\n'
             '      <property name="width">640</property>\n'
             '    </component>\n'
             '    <component name="overlay-video"\n'
             '               type="overlay-converter"\n'
             '               project="flumotion"\n'
             '               worker="overlay-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-video:video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="cc-logo">True</property>\n'
             '      <property name="fluendo-logo">True</property>\n'
             '      <property name="show-text">True</property>\n'
             '      <property name="text">Flumotion</property>\n'
             '    </component>\n'
             '    <component name="encoder-audio"\n'
             '               type="audio-encoder"\n'
             '               project="flumotion"\n'
             '               worker="audio-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>producer-audio:audio</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="encoder-video"\n'
             '               type="video-encoder"\n'
             '               project="flumotion"\n'
             '               worker="video-encoder-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>overlay-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="muxer-audio-video"\n'
             '               type="default-muxer"\n'
             '               project="flumotion"\n'
             '               worker="muxer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>encoder-audio</feed>\n'
             '        <feed>encoder-video</feed>\n'
             '      </eater>\n'
             '    </component>\n'
             '    <component name="http-audio-video"\n'
             '               type="http-streamer"\n'
             '               project="flumotion"\n'
             '               worker="streamer-worker"\n'
             '               version="%(version)s">\n'
             '      <eater name="default">\n'
             '        <feed>muxer-audio-video</feed>\n'
             '      </eater>\n'
             '      \n'
             '      <property name="bandwidth-limit">123000000</property>\n'
             '      <property name="burst-on-connect">False</property>\n'
             '      <property name="port">8080</property>\n'
             '      <property name="porter-password">password</property>\n'
             '      <property name="porter-socket-path">flu-XXXX.socket'
             '</property>\n'
             '      <property name="porter-username">username</property>\n'
             '      <property name="type">slave</property>\n'
             '    </component>\n'
             '  </flow>\n'
             '</planet>\n' % dict(version=configure.version)),
            configuration)