mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-11-03 14:33:37 +03:00 
			
		
		
		
	* Make HTTP server test data easier to examine * Add HTTP server parameter tests containing & and = * Fix URL parameter decoding in web server The parameters string needs to be first split on & and =, and URL decoding on parts done after that. Otherwise URL encoded & and = within parameter names and values cause incorrect splitting.
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from mock_decorators import setup, teardown
 | 
						|
from threading import Thread
 | 
						|
from poster.encode import MultipartParam
 | 
						|
from poster.encode import multipart_encode
 | 
						|
from poster.streaminghttp import register_openers
 | 
						|
import urllib2
 | 
						|
import urllib
 | 
						|
 | 
						|
def http_test(res, url, get=None, post=None):
 | 
						|
    response = ''
 | 
						|
    try:
 | 
						|
        if get:
 | 
						|
            url += '?' + urllib.urlencode(get)
 | 
						|
        if post:
 | 
						|
            post = urllib.urlencode(post)
 | 
						|
        request = urllib2.urlopen(url, post, 2)
 | 
						|
        response = request.read()
 | 
						|
    except:
 | 
						|
        return 1
 | 
						|
    if response != res:
 | 
						|
        return 1
 | 
						|
    return 0
 | 
						|
 | 
						|
@setup('HTTP GET Parameters')
 | 
						|
def setup_http_get_params(e):
 | 
						|
    def testRun():
 | 
						|
        return http_test('var1 = val with spaces\nva=r+ = so&me%', 'http://etd.local/get', {'var1' : 'val with spaces', 'va=r+' : 'so&me%'})
 | 
						|
    Thread(target=testRun).start()
 | 
						|
 | 
						|
@teardown('HTTP GET Parameters')
 | 
						|
def teardown_http_get_params(e):
 | 
						|
    return 0
 | 
						|
 | 
						|
@setup('HTTP POST Parameters')
 | 
						|
def setup_http_post_params(e):
 | 
						|
    def testRun():
 | 
						|
        return http_test('var2 = val with spaces', 'http://etd.local/post', None, {'var2' : 'val with spaces'})
 | 
						|
    Thread(target=testRun).start()
 | 
						|
 | 
						|
@teardown('HTTP POST Parameters')
 | 
						|
def teardown_http_post_params(e):
 | 
						|
    return 0
 | 
						|
 | 
						|
@setup('HTTP GET+POST Parameters')
 | 
						|
def setup_http_getpost_params(e):
 | 
						|
    def testRun():
 | 
						|
        return http_test('var3 = val with spaces\nva&r+ = so=me%', 'http://etd.local/get_and_post', {'var3' : 'val with spaces'}, {'va&r+' : 'so=me%'})
 | 
						|
    Thread(target=testRun).start()
 | 
						|
 | 
						|
@teardown('HTTP GET+POST Parameters')
 | 
						|
def teardown_http_getpost_params(e):
 | 
						|
    return 0
 | 
						|
 | 
						|
@setup('HTTP Upload')
 | 
						|
def setup_http_upload(e):
 | 
						|
    def testRun():
 | 
						|
        response = ''
 | 
						|
        try:
 | 
						|
            register_openers()
 | 
						|
            p = MultipartParam("file", "0123456789abcdef", "test.txt", "text/plain; charset=utf8")
 | 
						|
            datagen, headers = multipart_encode( [("var4", "val with spaces"), p] )
 | 
						|
            request = urllib2.Request('http://etd.local/upload', datagen, headers)
 | 
						|
            response = urllib2.urlopen(request, None, 2).read()
 | 
						|
        except:
 | 
						|
            return 1
 | 
						|
        if response != 'test.txt:16\nvar4 = val with spaces':
 | 
						|
            return 1
 | 
						|
        return 0
 | 
						|
    Thread(target=testRun).start()
 | 
						|
 | 
						|
@teardown('HTTP Upload')
 | 
						|
def teardown_http_upload(e):
 | 
						|
    return 0
 |