import RNTest from './react-native-testkit/' import React from 'react' import RNFetchBlob from 'react-native-fetch-blob' import { Text, View, Platform, Dimensions, Image, } from 'react-native'; const fs = RNFetchBlob.fs const { Assert, Comparer, Info, prop } = RNTest const describe = RNTest.config({ group : '0.8.0', run : true, expand : true, timeout : 999999999, }) const { TEST_SERVER_URL, TEST_SERVER_URL_SSL, FILENAME, DROPBOX_TOKEN, styles } = prop() const dirs = RNFetchBlob.fs.dirs false && describe('upload BASE64 v.s. Storage', (report, done) => { let b64data = null let storageFile = dirs.DocumentDir + '/benchmark-cache' let b64res, storageRes let iteration = 50 let target = `${TEST_SERVER_URL}/public/1mb-dummy` RNFetchBlob .config({ path : storageFile }) .fetch('GET', target) .then((res) => res.readFile('base64')) .then((data) => { b64data = data report( <Info key="test data should correct"> <Text>size of b64data = {data.length}</Text> </Info>) b64Test() }) // base64 upload benchmark function b64Test() { let p = Promise.resolve() let begin = Date.now() let count = 0 for(let i=0; i< iteration; i++) { p = p.then(() => { if(++count <iteration){ report( <Info key="benchmark progress" uid="report"> <Text style={{textAlign:'center'}}>BASE64 {count}/{iteration}</Text> </Info>) return RNFetchBlob.fetch('POST', `${TEST_SERVER_URL}/echo`, {}, b64data) } else { b64res = Date.now() - begin storageTest() } }) } } // storage upload benchmark function storageTest() { let p = Promise.resolve() let begin = Date.now() let count = 0 for(let i=0; i< iteration; i++) { p = p.then(() => { if(++count < iteration){ report( <Info key="benchmark progress" uid="report"> <Text style={{textAlign:'center'}}>Storage {count}/{iteration}</Text> </Info>) return RNFetchBlob.fetch('POST', `${TEST_SERVER_URL}/echo`, {}, RNFetchBlob.wrap(storageFile)) } else { storageRes = Date.now() - begin summary() } }) } } function summary() { report( <Info key="BASE64"> <Text>{`BASE64 ${b64res/iteration} ms/req`}</Text> </Info>, <Info key="Storage"> <Text>{`Storage ${storageRes/iteration} ms/req`}</Text> </Info>) done() } }) describe('write file BASE64 v.s. URI', (report, done) => { let iteration = 200 let target = `${TEST_SERVER_URL}/public/12k-dummy` let sourceURI = dirs.DocumentDir + '/benchmark2-source' let writeTarget = dirs.DocumentDir +'/benchmark2-target' let sourceBASE64 = null let b64Res = 0 let uriRes = 0 RNFetchBlob.fetch('GET', target) .then((res) => { sourceBASE64 = res.base64() return fs.writeFile(sourceURI, res.base64(), 'base64') }) .then(() => { let p = Promise.resolve() let begin = Date.now() let count = 0 for(let i=0; i< iteration; i++) { p = p.then(() => { if(++count < iteration){ report( <Info key="benchmark progress" uid="report2"> <Text style={{textAlign:'center'}}>BASE64 {count}/{iteration}</Text> </Info>) return fs.readFile(sourceURI, 'base64') .then((data) => fs.writeFile(writeTarget, data)) } else { b64Res = Date.now() - begin uriTest() } }) } }) function uriTest() { let p = Promise.resolve() let begin = Date.now() let count = 0 for(let i=0; i< iteration; i++) { p = p.then(() => { if(++count < iteration){ report( <Info key="benchmark progress" uid="report2"> <Text style={{textAlign:'center'}}>URI {count}/{iteration}</Text> </Info>) return fs.writeFile(writeTarget, sourceURI, 'uri') } else { uriRes = Date.now() - begin summary() } }) } } function summary() { report( <Info key="BASE64 - writeFile"> <Text>{`BASE64 ${b64Res/iteration} ms/req`}</Text> </Info>, <Info key="URI - writeFile"> <Text>{`URI ${uriRes/iteration} ms/req`}</Text> </Info>) done() } }) false && describe('read file benchmark', (report, done) => { let iteration = 50 let target = `${TEST_SERVER_URL}/public/1mb-dummy` let source = dirs.DocumentDir + '/benchmark3-source' let res = {} RNFetchBlob.fetch('GET', target) .then((res) => { return fs.writeFile(source, res.base64(), 'base64') }) .then(() => { test('base64', () => { test('ascii', () => { test('utf8', summary) }) }) }) function test(encode, cb) { let p = Promise.resolve() let begin = Date.now() let count = 0 for(let i=0; i< iteration; i++) { p = p.then(() => { if(++count < iteration){ report( <Info key="benchmark progress" uid="report3"> <Text style={{textAlign:'center'}}>{encode} {count}/{iteration}</Text> </Info>) return fs.readFile(source, encode) } else { res[encode] = Date.now() - begin cb() } }) } } function summary() { report( <Info key="BASE64 - readFile"> <Text>{`BASE64 ${res['base64']/iteration} ms/req`}</Text> </Info>, <Info key="ASCII - readFile"> <Text>{`ASCII ${res['ascii']/iteration} ms/req`}</Text> </Info>, <Info key="UTF8 - readFile"> <Text>{`UTF8 ${res['utf8']/iteration} ms/req`}</Text> </Info>) done() } })