Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-09-01 10:35:11 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-09-01 11:00:42 (GMT)
commitcacd61e0a7404a522e5a14e54aec68ef7121e3ff (patch)
treedf2b309113668dc3171c72915703cb7f9bfd5f26
parentdbf9be353818e17a76df5da8e5ffe3f617d29b67 (diff)
Add spawnable submit local API route for Report resource
-rwxr-xr-xsugar-network2
-rw-r--r--sugar_network/client/routes.py25
-rw-r--r--sugar_network/node/routes.py4
-rw-r--r--sugar_network/toolkit/router.py5
-rw-r--r--tests/__init__.py4
-rwxr-xr-xtests/units/client/cache.py10
-rwxr-xr-xtests/units/client/implementations.py14
-rwxr-xr-xtests/units/client/offline_routes.py31
-rwxr-xr-xtests/units/client/online_routes.py49
-rwxr-xr-xtests/units/client/routes.py5
-rwxr-xr-xtests/units/node/node.py20
11 files changed, 123 insertions, 46 deletions
diff --git a/sugar-network b/sugar-network
index cc56837..5276eae 100755
--- a/sugar-network
+++ b/sugar-network
@@ -143,7 +143,7 @@ class Application(application.Application):
conn = self._connect()
# XXX Have to proceed auth before uploading data
conn.get(cmd='whoami')
- guid = conn.upload(['implementation'], path, cmd='release', **props)
+ guid = conn.upload(['implementation'], path, cmd='submit', **props)
if porcelain.value:
print guid
diff --git a/sugar_network/client/routes.py b/sugar_network/client/routes.py
index 55fd92f..268ef38 100644
--- a/sugar_network/client/routes.py
+++ b/sugar_network/client/routes.py
@@ -16,7 +16,8 @@
import os
import logging
import httplib
-from os.path import join
+from zipfile import ZipFile, ZIP_DEFLATED
+from os.path import join, basename
from sugar_network import db, client, node, toolkit, model
from sugar_network.client import journal, implementations
@@ -172,11 +173,29 @@ class ClientRoutes(model.FrontRoutes, implementations.Routes, journal.Routes):
else:
return self.fallback(request, response)
+ @route('POST', ['report'], cmd='submit', mime_type='text/event-stream')
+ def submit_report(self, request, response):
+ logs = request.content.pop('logs')
+ guid = self.fallback(method='POST', path=['report'],
+ content=request.content, content_type='application/json')
+ if logs:
+ with toolkit.TemporaryFile() as tmpfile:
+ with ZipFile(tmpfile, 'w', ZIP_DEFLATED) as zipfile:
+ for path in logs:
+ zipfile.write(path, basename(path))
+ tmpfile.seek(0)
+ self.fallback(method='PUT', path=['report', guid, 'data'],
+ content_stream=tmpfile, content_type='application/zip')
+ yield {'event': 'done', 'guid': guid}
+
@fallbackroute()
def fallback(self, request=None, response=None, method=None, path=None,
- cmd=None, **kwargs):
+ cmd=None, content=None, content_stream=None, content_type=None,
+ **kwargs):
if request is None:
- request = Request(method=method, path=path, cmd=cmd)
+ request = Request(method=method, path=path, cmd=cmd,
+ content=content, content_stream=content_stream,
+ content_type=content_type)
if response is None:
response = Response()
request.update(kwargs)
diff --git a/sugar_network/node/routes.py b/sugar_network/node/routes.py
index 0458258..e34c0ed 100644
--- a/sugar_network/node/routes.py
+++ b/sugar_network/node/routes.py
@@ -138,10 +138,10 @@ class NodeRoutes(model.VolumeRoutes, model.FrontRoutes):
else:
return toolkit.iter_file(path)
- @route('POST', ['implementation'], cmd='release',
+ @route('POST', ['implementation'], cmd='submit',
arguments={'initial': False},
mime_type='application/json', acl=ACL.AUTH | ACL.AUTHOR)
- def release(self, request, document):
+ def submit_implementation(self, request, document):
with toolkit.NamedTemporaryFile() as blob:
shutil.copyfileobj(request.content_stream, blob)
blob.flush()
diff --git a/sugar_network/toolkit/router.py b/sugar_network/toolkit/router.py
index b7ba542..dd22b83 100644
--- a/sugar_network/toolkit/router.py
+++ b/sugar_network/toolkit/router.py
@@ -101,7 +101,8 @@ class Request(dict):
subcall = lambda *args: enforce(False)
def __init__(self, environ=None, method=None, path=None, cmd=None,
- content=None, content_type=None, session=None, **kwargs):
+ content=None, content_stream=None, content_type=None, session=None,
+ **kwargs):
dict.__init__(self)
self.path = []
@@ -113,7 +114,7 @@ class Request(dict):
self._dirty_query = False
self._if_modified_since = _NOT_SET
self._accept_language = _NOT_SET
- self._content_stream = _NOT_SET
+ self._content_stream = content_stream or _NOT_SET
self._content_type = content_type or _NOT_SET
if environ:
diff --git a/tests/__init__.py b/tests/__init__.py
index 09149ec..da59a40 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -310,8 +310,8 @@ class Test(unittest.TestCase):
coroutine.dispatch()
return volume
- def start_offline_client(self):
- self.home_volume = db.Volume('db', model.RESOURCES)
+ def start_offline_client(self, resources=None):
+ self.home_volume = db.Volume('db', resources or model.RESOURCES)
commands = ClientRoutes(self.home_volume)
server = coroutine.WSGIServer(('127.0.0.1', client.ipc_port.value), Router(commands))
coroutine.spawn(server.serve_forever)
diff --git a/tests/units/client/cache.py b/tests/units/client/cache.py
index d8c2dde..5ae418e 100755
--- a/tests/units/client/cache.py
+++ b/tests/units/client/cache.py
@@ -204,7 +204,7 @@ class CacheTest(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
impl2 = conn.upload(['implementation'], StringIO(self.zips(['TestActivity/activity/activity.info', [
'[Activity]',
'name = TestActivity',
@@ -214,7 +214,7 @@ class CacheTest(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
impl3 = conn.upload(['implementation'], StringIO(self.zips(['TestActivity/activity/activity.info', [
'[Activity]',
'name = TestActivity',
@@ -224,7 +224,7 @@ class CacheTest(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
self.assertEqual('exit', [i for i in conn.get(['context', 'context1'], cmd='launch')][-1]['event'])
self.assertEqual([impl1], [i for i in self.client_routes._cache])
@@ -255,7 +255,7 @@ class CacheTest(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
conn.put(['context', 'context'], True, cmd='clone')
self.assertEqual([], [i for i in self.client_routes._cache])
@@ -274,7 +274,7 @@ class CacheTest(tests.Test):
'activity_version = 2',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
shutil.rmtree('cache')
conn.put(['context', 'context'], True, cmd='clone')
diff --git a/tests/units/client/implementations.py b/tests/units/client/implementations.py
index 3ed4922..12f4e98 100755
--- a/tests/units/client/implementations.py
+++ b/tests/units/client/implementations.py
@@ -46,7 +46,7 @@ class Implementations(tests.Test):
'license = Public Domain',
'requires = dep1; dep2',
]])
- impl = conn.upload(['implementation'], StringIO(blob), cmd='release', initial=True)
+ impl = conn.upload(['implementation'], StringIO(blob), cmd='submit', initial=True)
conn.post(['context'], {
'guid': 'dep1',
@@ -120,7 +120,7 @@ class Implementations(tests.Test):
'TestActivity/file1',
'TestActivity/test/file2',
)
- impl = conn.upload(['implementation'], StringIO(blob), cmd='release', initial=True)
+ impl = conn.upload(['implementation'], StringIO(blob), cmd='submit', initial=True)
conn.put(['context', 'bundle_id'], True, cmd='clone')
@@ -144,7 +144,7 @@ class Implementations(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
solution = ['http://127.0.0.1:8888', ['stable'], [{
'license': ['Public Domain'],
'stability': 'stable',
@@ -270,7 +270,7 @@ class Implementations(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
conn.upload(['implementation'], StringIO(self.zips(['TestActivity/activity/activity.info', [
'[Activity]',
'name = TestActivity',
@@ -280,7 +280,7 @@ class Implementations(tests.Test):
'activity_version = 2',
'license = Public Domain',
'stability = testing',
- ]])), cmd='release')
+ ]])), cmd='submit')
conn.upload(['implementation'], StringIO(self.zips(['TestActivity/activity/activity.info', [
'[Activity]',
'name = TestActivity',
@@ -290,7 +290,7 @@ class Implementations(tests.Test):
'activity_version = 3',
'license = Public Domain',
'stability = buggy',
- ]])), cmd='release')
+ ]])), cmd='submit')
cached_path = 'cache/solutions/bu/bundle_id'
self.assertEqual('exit', [i for i in conn.get(['context', 'bundle_id'], cmd='launch')][-1]['event'])
@@ -338,7 +338,7 @@ class Implementations(tests.Test):
'#!/bin/sh',
'cat $6',
]],
- )), cmd='release', initial=True)
+ )), cmd='submit', initial=True)
conn.post(['context'], {
'guid': 'document',
diff --git a/tests/units/client/offline_routes.py b/tests/units/client/offline_routes.py
index d3a11d8..7c98ed0 100755
--- a/tests/units/client/offline_routes.py
+++ b/tests/units/client/offline_routes.py
@@ -3,6 +3,7 @@
import json
from cStringIO import StringIO
+from zipfile import ZipFile
from os.path import exists
from __init__ import tests, src_root
@@ -10,6 +11,8 @@ from __init__ import tests, src_root
from sugar_network import client, model
from sugar_network.client import IPCConnection, implementations, packagekit
from sugar_network.client.routes import ClientRoutes
+from sugar_network.model.user import User
+from sugar_network.model.report import Report
from sugar_network.toolkit.router import Router
from sugar_network.toolkit import coroutine, http, lsb_release
@@ -276,7 +279,7 @@ class OfflineRoutes(tests.Test):
'activity_version = 1',
'license=Public Domain',
]])
- impl = ipc.upload(['implementation'], StringIO(blob), cmd='release', initial=True)
+ impl = ipc.upload(['implementation'], StringIO(blob), cmd='submit', initial=True)
ipc.put(['context', 'bundle_id'], True, cmd='clone')
solution = [{
@@ -455,6 +458,32 @@ Can't find all required implementations:
self.assertRaises(http.NotFound, ipc.get, ['context', guid])
assert not exists(guid_path)
+ def test_SubmitReport(self):
+ ipc = self.home_volume = self.start_offline_client([User, Report])
+
+ self.touch(
+ ['file1', 'content1'],
+ ['file2', 'content2'],
+ ['file3', 'content3'],
+ )
+ events = [i for i in ipc.post(['report'], {'context': 'context', 'error': 'error', 'logs': [
+ tests.tmpdir + '/file1',
+ tests.tmpdir + '/file2',
+ tests.tmpdir + '/file3',
+ ]}, cmd='submit')]
+ self.assertEqual('done', events[-1]['event'])
+ guid = events[-1]['guid']
+
+ self.assertEqual({
+ 'context': 'context',
+ 'error': 'error',
+ },
+ ipc.get(['report', guid], reply=['context', 'error']))
+ zipfile = ZipFile('db/report/%s/%s/data.blob' % (guid[:2], guid))
+ self.assertEqual('content1', zipfile.read('file1'))
+ self.assertEqual('content2', zipfile.read('file2'))
+ self.assertEqual('content3', zipfile.read('file3'))
+
if __name__ == '__main__':
tests.main()
diff --git a/tests/units/client/online_routes.py b/tests/units/client/online_routes.py
index f4e052e..de9f3f4 100755
--- a/tests/units/client/online_routes.py
+++ b/tests/units/client/online_routes.py
@@ -7,6 +7,7 @@ import time
import copy
import shutil
import zipfile
+from zipfile import ZipFile
from cStringIO import StringIO
from os.path import exists, lexists, basename
@@ -20,6 +21,7 @@ from sugar_network.client.routes import ClientRoutes, Request, Response
from sugar_network.node.master import MasterRoutes
from sugar_network.db import Volume, Resource
from sugar_network.model.user import User
+from sugar_network.model.report import Report
from sugar_network.model.context import Context
from sugar_network.model.implementation import Implementation
from sugar_network.model.artifact import Artifact
@@ -579,7 +581,7 @@ Can't find all required implementations:
'license=Public Domain',
])
blob = self.zips(['TestActivity/activity/activity.info', activity_info])
- impl = ipc.upload(['implementation'], StringIO(blob), cmd='release', initial=True)
+ impl = ipc.upload(['implementation'], StringIO(blob), cmd='submit', initial=True)
clone_path = 'client/context/bu/bundle_id/.clone'
blob_path = tests.tmpdir + '/client/implementation/%s/%s/data.blob' % (impl[:2], impl)
solution = [{
@@ -729,7 +731,7 @@ Can't find all required implementations:
'license = Public Domain',
])
blob1 = self.zips(['TestActivity/activity/activity.info', activity_info1])
- impl1 = ipc.upload(['implementation'], StringIO(blob1), cmd='release', initial=True)
+ impl1 = ipc.upload(['implementation'], StringIO(blob1), cmd='submit', initial=True)
activity_info2 = '\n'.join([
'[Activity]',
@@ -742,7 +744,7 @@ Can't find all required implementations:
'stability = buggy',
])
blob2 = self.zips(['TestActivity/activity/activity.info', activity_info2])
- impl2 = ipc.upload(['implementation'], StringIO(blob2), cmd='release', initial=True)
+ impl2 = ipc.upload(['implementation'], StringIO(blob2), cmd='submit', initial=True)
self.assertEqual(
'ready',
@@ -785,7 +787,7 @@ Can't find all required implementations:
'license = Public Domain',
])
blob = self.zips(['TestActivity/activity/activity.info', activity_info])
- impl = ipc.upload(['implementation'], StringIO(blob), cmd='release', initial=True)
+ impl = ipc.upload(['implementation'], StringIO(blob), cmd='submit', initial=True)
blob_path = 'master/implementation/%s/%s/data.blob' % (impl[:2], impl)
self.assertEqual({
@@ -843,7 +845,7 @@ Can't find all required implementations:
'activity_version = 1',
'license=Public Domain',
]])
- impl = ipc.upload(['implementation'], StringIO(blob), cmd='release', initial=True)
+ impl = ipc.upload(['implementation'], StringIO(blob), cmd='submit', initial=True)
coroutine.sleep(.1)
solution = [{
@@ -878,7 +880,7 @@ Can't find all required implementations:
'activity_version = 2',
'license=Public Domain',
]])
- impl = ipc.upload(['implementation'], StringIO(blob), cmd='release')
+ impl = ipc.upload(['implementation'], StringIO(blob), cmd='submit')
coroutine.sleep(.1)
shutil.rmtree('cache/solutions')
@@ -967,7 +969,7 @@ Can't find all required implementations:
'license=Public Domain',
])
blob = self.zips(['TestActivity/activity/activity.info', activity_info])
- impl = ipc.upload(['implementation'], StringIO(blob), cmd='release', initial=True)
+ impl = ipc.upload(['implementation'], StringIO(blob), cmd='submit', initial=True)
solution = [{
'guid': impl,
@@ -1265,7 +1267,7 @@ Can't find all required implementations:
def yield_json_and_sleep(self):
yield '"'
yield 'r'
- coroutine.sleep(.5)
+ coroutine.sleep(1)
yield 'emote"'
node_pid = self.fork_master([User], NodeRoutes)
@@ -1276,10 +1278,10 @@ Can't find all required implementations:
self.assertEqual('remote', ipc.get(cmd='sleep'))
self.assertEqual('remote\n' * 66, ipc.get(cmd='yield_raw_and_sleep'))
self.assertEqual('remote', ipc.get(cmd='yield_json_and_sleep'))
- assert time.time() - ts >= 1.5
+ assert time.time() - ts >= 2
def kill():
- coroutine.sleep(.25)
+ coroutine.sleep(.5)
self.waitpid(node_pid)
coroutine.spawn(kill)
@@ -1340,6 +1342,33 @@ Can't find all required implementations:
trigger.wait()
assert not cp.inline()
+ def test_SubmitReport(self):
+ self.home_volume = self.start_online_client([User, Report])
+ ipc = IPCConnection()
+
+ self.touch(
+ ['file1', 'content1'],
+ ['file2', 'content2'],
+ ['file3', 'content3'],
+ )
+ events = [i for i in ipc.post(['report'], {'context': 'context', 'error': 'error', 'logs': [
+ tests.tmpdir + '/file1',
+ tests.tmpdir + '/file2',
+ tests.tmpdir + '/file3',
+ ]}, cmd='submit')]
+ self.assertEqual('done', events[-1]['event'])
+ guid = events[-1]['guid']
+
+ self.assertEqual({
+ 'context': 'context',
+ 'error': 'error',
+ },
+ ipc.get(['report', guid], reply=['context', 'error']))
+ zipfile = ZipFile('master/report/%s/%s/data.blob' % (guid[:2], guid))
+ self.assertEqual('content1', zipfile.read('file1'))
+ self.assertEqual('content2', zipfile.read('file2'))
+ self.assertEqual('content3', zipfile.read('file3'))
+
if __name__ == '__main__':
tests.main()
diff --git a/tests/units/client/routes.py b/tests/units/client/routes.py
index 6450e81..50ed910 100755
--- a/tests/units/client/routes.py
+++ b/tests/units/client/routes.py
@@ -64,7 +64,7 @@ class RoutesTest(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
guid2 = 'context2'
ipc.upload(['implementation'], StringIO(self.zips(['TestActivity/activity/activity.info', [
'[Activity]',
@@ -75,7 +75,7 @@ class RoutesTest(tests.Test):
'activity_version = 1',
'license = Public Domain',
'stability = stable',
- ]])), cmd='release', initial=True)
+ ]])), cmd='submit', initial=True)
guid3 = 'context3'
guid4 = ipc.post(['context'], {
'guid': 'context4',
@@ -254,7 +254,6 @@ class RoutesTest(tests.Test):
assert self.node_volume['context'].exists(guid)
self.assertEqual(['context'], volume.keys())
-
def test_SwitchToOfflineForAbsentOnlineProps(self):
volume = db.Volume('client', model.RESOURCES)
cp = ClientRoutes(volume, client.api_url.value)
diff --git a/tests/units/node/node.py b/tests/units/node/node.py
index 3506495..1925a90 100755
--- a/tests/units/node/node.py
+++ b/tests/units/node/node.py
@@ -689,7 +689,7 @@ class NodeTest(tests.Test):
'requires = sugar>=0.88; dep'
])
bundle1 = self.zips(('topdir/activity/activity.info', activity_info))
- guid1 = json.load(conn.request('POST', ['implementation'], bundle1, params={'cmd': 'release'}).raw)
+ guid1 = json.load(conn.request('POST', ['implementation'], bundle1, params={'cmd': 'submit'}).raw)
impl = volume['implementation'].get(guid1)
self.assertEqual('bundle_id', impl['context'])
@@ -726,7 +726,7 @@ class NodeTest(tests.Test):
'stability = stable',
])
bundle2 = self.zips(('topdir/activity/activity.info', activity_info))
- guid2 = json.load(conn.request('POST', ['implementation'], bundle2, params={'cmd': 'release'}).raw)
+ guid2 = json.load(conn.request('POST', ['implementation'], bundle2, params={'cmd': 'submit'}).raw)
self.assertEqual('1', volume['implementation'].get(guid1)['version'])
self.assertEqual([], volume['implementation'].get(guid1)['layer'])
@@ -745,7 +745,7 @@ class NodeTest(tests.Test):
'stability = stable',
])
bundle3 = self.zips(('topdir/activity/activity.info', activity_info))
- guid3 = json.load(conn.request('POST', ['implementation'], bundle3, params={'cmd': 'release'}).raw)
+ guid3 = json.load(conn.request('POST', ['implementation'], bundle3, params={'cmd': 'submit'}).raw)
self.assertEqual('1', volume['implementation'].get(guid1)['version'])
self.assertEqual(['deleted'], volume['implementation'].get(guid1)['layer'])
@@ -766,7 +766,7 @@ class NodeTest(tests.Test):
'stability = buggy',
])
bundle4 = self.zips(('topdir/activity/activity.info', activity_info))
- guid4 = json.load(conn.request('POST', ['implementation'], bundle4, params={'cmd': 'release'}).raw)
+ guid4 = json.load(conn.request('POST', ['implementation'], bundle4, params={'cmd': 'submit'}).raw)
self.assertEqual('1', volume['implementation'].get(guid1)['version'])
self.assertEqual(['deleted'], volume['implementation'].get(guid1)['layer'])
@@ -825,7 +825,7 @@ class NodeTest(tests.Test):
base64.b64decode('3hIElQAAAAAMAAAAHAAAAHwAAAARAAAA3AAAAAAAAAAgAQAADwAAACEBAAAOAAAAMQEAAA0AAABAAQAACgAAAE4BAAAMAAAAWQEAAA0AAABmAQAAJwAAAHQBAAAUAAAAnAEAABAAAACxAQAABwAAAMIBAAAIAAAAygEAANEBAADTAQAAIQAAAKUDAAATAAAAxwMAABwAAADbAwAAFwAAAPgDAAAhAAAAEAQAAB0AAAAyBAAAQAAAAFAEAAA9AAAAkQQAADUAAADPBAAAFAAAAAUFAAAQAAAAGgUAAAEAAAACAAAABwAAAAAAAAADAAAAAAAAAAwAAAAJAAAAAAAAAAoAAAAEAAAAAAAAAAAAAAALAAAABgAAAAgAAAAFAAAAAENob29zZSBkb2N1bWVudABEb3dubG9hZGluZy4uLgBGaXQgdG8gd2luZG93AEZ1bGxzY3JlZW4ASW1hZ2UgVmlld2VyAE9yaWdpbmFsIHNpemUAUmV0cmlldmluZyBzaGFyZWQgaW1hZ2UsIHBsZWFzZSB3YWl0Li4uAFJvdGF0ZSBhbnRpY2xvY2t3aXNlAFJvdGF0ZSBjbG9ja3dpc2UAWm9vbSBpbgBab29tIG91dABQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTgpSZXBvcnQtTXNnaWQtQnVncy1UbzogClBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTA5LTI3IDE0OjU3LTA0MDAKUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOS0yMiAxMzo1MCswMjAwCkxhc3QtVHJhbnNsYXRvcjoga3JvbTlyYSA8a3JvbTlyYUBnbWFpbC5jb20+Ckxhbmd1YWdlLVRlYW06IExBTkdVQUdFIDxMTEBsaS5vcmc+Ckxhbmd1YWdlOiAKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKUGx1cmFsLUZvcm1zOiBucGx1cmFscz0zOyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTAgfHwgbiUxMDA+PTIwKSA/IDEgOiAyKTsKWC1HZW5lcmF0b3I6IFBvb3RsZSAyLjAuMwoA0JLRi9Cx0LXRgNC40YLQtSDQtNC+0LrRg9C80LXQvdGCANCX0LDQs9GA0YPQt9C60LAuLi4A0KPQvNC10YHRgtC40YLRjCDQsiDQvtC60L3QtQDQn9C+0LvQvdGL0Lkg0Y3QutGA0LDQvQDQn9GA0L7RgdC80L7RgtGAINC60LDRgNGC0LjQvdC+0LoA0JjRgdGC0LjQvdC90YvQuSDRgNCw0LfQvNC10YAA0J/QvtC70YPRh9C10L3QuNC1INC40LfQvtCx0YDQsNC20LXQvdC40LksINC/0L7QtNC+0LbQtNC40YLQtS4uLgDQn9C+0LLQtdGA0L3Rg9GC0Ywg0L/RgNC+0YLQuNCyINGH0LDRgdC+0LLQvtC5INGB0YLRgNC10LvQutC4ANCf0L7QstC10YDQvdGD0YLRjCDQv9C+INGH0LDRgdC+0LLQvtC5INGB0YLRgNC10LvQutC1ANCf0YDQuNCx0LvQuNC30LjRgtGMANCe0YLQtNCw0LvQuNGC0YwA')),
('ImageViewer.activity/activity/activity-imageviewer.svg', svg),
)
- impl = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'release'}).raw)
+ impl = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'submit'}).raw)
context = volume['context'].get('org.laptop.ImageViewerActivity')
self.assertEqual({
@@ -867,8 +867,8 @@ class NodeTest(tests.Test):
])),
('ImageViewer.activity/activity/activity-imageviewer.svg', ''),
)
- self.assertRaises(http.NotFound, conn.request, 'POST', ['implementation'], bundle, params={'cmd': 'release'})
- impl = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'release', 'initial': 1}).raw)
+ self.assertRaises(http.NotFound, conn.request, 'POST', ['implementation'], bundle, params={'cmd': 'submit'})
+ impl = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'submit', 'initial': 1}).raw)
context = volume['context'].get('org.laptop.ImageViewerActivity')
self.assertEqual({'en': 'Image Viewer'}, context['title'])
@@ -897,8 +897,8 @@ class NodeTest(tests.Test):
self.override(client, 'sugar_uid', lambda: tests.UID)
conn = Connection()
- impl1 = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'release', 'initial': 1}).raw)
- impl2 = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'release'}).raw)
+ impl1 = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'submit', 'initial': 1}).raw)
+ impl2 = json.load(conn.request('POST', ['implementation'], bundle, params={'cmd': 'submit'}).raw)
self.assertEqual(['deleted'], volume['implementation'].get(impl1)['layer'])
self.assertEqual([], volume['implementation'].get(impl2)['layer'])
@@ -912,7 +912,7 @@ class NodeTest(tests.Test):
})
conn = Connection()
conn.get(cmd='whoami')
- self.assertRaises(http.Forbidden, conn.request, 'POST', ['implementation'], bundle, params={'cmd': 'release'})
+ self.assertRaises(http.Forbidden, conn.request, 'POST', ['implementation'], bundle, params={'cmd': 'submit'})
self.assertEqual(['deleted'], volume['implementation'].get(impl1)['layer'])
self.assertEqual([], volume['implementation'].get(impl2)['layer'])