From 9e7ba05863f31dc198ace2ab536fc9533aff0375 Mon Sep 17 00:00:00 2001 From: Oscar Franco Date: Sun, 8 Sep 2024 07:26:31 -0400 Subject: [PATCH 01/28] Try to launch android emulator and run in-app tests --- .github/workflows/ci.yml | 82 ++++++++++++++++++-- example/ios/Podfile.lock | 12 +++ example/package.json | 1 + example/src/App.tsx | 140 ++++------------------------------ scripts/poll-in-app-server.js | 58 ++++++++++++++ scripts/test-android.sh | 2 + yarn.lock | 12 +++ 7 files changed, 178 insertions(+), 129 deletions(-) create mode 100644 scripts/poll-in-app-server.js create mode 100755 scripts/test-android.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7b0ded49..9093808c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,67 @@ jobs: - name: Typecheck files run: yarn typecheck - build-android: + # build-android: + # runs-on: ubuntu-latest + # env: + # TURBO_CACHE_DIR: .turbo/android + # steps: + # - name: Checkout + # uses: actions/checkout@v4 + + # - name: Turn off addons + # run: | + # node ./scripts/turnOffEverything.js + + # - name: Setup + # uses: ./.github/actions/setup + + # - name: Cache turborepo for Android + # uses: actions/cache@v3 + # with: + # path: ${{ env.TURBO_CACHE_DIR }} + # key: ${{ runner.os }}-turborepo-android-${{ hashFiles('yarn.lock') }} + # restore-keys: | + # ${{ runner.os }}-turborepo-android- + + # - name: Check turborepo cache for Android + # run: | + # TURBO_CACHE_STATUS=$(node -p "($(yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:android').cache.status") + + # if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then + # echo "turbo_cache_hit=1" >> $GITHUB_ENV + # fi + + # - name: Install JDK + # if: env.turbo_cache_hit != 1 + # uses: actions/setup-java@v3 + # with: + # distribution: 'zulu' + # java-version: '17' + + # - name: Finalize Android SDK + # if: env.turbo_cache_hit != 1 + # run: | + # /bin/bash -c "yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses > /dev/null" + + # - name: Cache Gradle + # if: env.turbo_cache_hit != 1 + # uses: actions/cache@v3 + # with: + # path: | + # ~/.gradle/wrapper + # ~/.gradle/caches + # key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }} + # restore-keys: | + # ${{ runner.os }}-gradle- + + # - name: Build example for Android + # env: + # JAVA_OPTS: '-XX:MaxHeapSize=6g' + # run: | + # yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" + + test-android: runs-on: ubuntu-latest env: TURBO_CACHE_DIR: .turbo/android @@ -68,11 +128,23 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - - name: Build example for Android - env: - JAVA_OPTS: '-XX:MaxHeapSize=6g' + - name: Enable KVM run: | - yarn turbo run build:android --cache-dir="${{ env.TURBO_CACHE_DIR }}" + echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules + sudo udevadm control --reload-rules + sudo udevadm trigger --name-match=kvm + + - name: run tests + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: 29 + script: ./scripts test-android.sh + + # - name: Build example for Android + # env: + # JAVA_OPTS: '-XX:MaxHeapSize=6g' + # run: | + # yarn turbo run android --cache-dir="${{ env.TURBO_CACHE_DIR }}" build-ios: runs-on: macos-latest diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 2d3484ae..0edd4a4e 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -3,6 +3,9 @@ PODS: - DoubleConversion (1.1.6) - FBLazyVector (0.74.0) - fmt (9.1.0) + - GCDWebServer (3.5.4): + - GCDWebServer/Core (= 3.5.4) + - GCDWebServer/Core (3.5.4) - glog (0.3.5) - hermes-engine (0.74.0): - hermes-engine/Pre-built (= 0.74.0) @@ -939,6 +942,9 @@ PODS: - React-Mapbuffer (0.74.0): - glog - React-debug + - react-native-http-bridge-refurbished (1.2.9): + - GCDWebServer + - React - react-native-restart (0.0.27): - React-Core - React-nativeconfig (0.74.0) @@ -1206,6 +1212,7 @@ DEPENDENCIES: - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - react-native-http-bridge-refurbished (from `../node_modules/react-native-http-bridge-refurbished`) - react-native-restart (from `../node_modules/react-native-restart`) - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) @@ -1234,6 +1241,7 @@ DEPENDENCIES: SPEC REPOS: trunk: + - GCDWebServer - SocketRocket EXTERNAL SOURCES: @@ -1300,6 +1308,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/logger" React-Mapbuffer: :path: "../node_modules/react-native/ReactCommon" + react-native-http-bridge-refurbished: + :path: "../node_modules/react-native-http-bridge-refurbished" react-native-restart: :path: "../node_modules/react-native-restart" React-nativeconfig: @@ -1356,6 +1366,7 @@ SPEC CHECKSUMS: DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 FBLazyVector: 026c8f4ae67b06e088ae01baa2271ef8a26c0e8c fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 + GCDWebServer: 2c156a56c8226e2d5c0c3f208a3621ccffbe3ce4 glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2 hermes-engine: 6eae7edb2f563ee41d7c1f91f4f2e57c26d8a5c3 op-sqlite: 743e833721d4b4a0af7e7fefbff4375dc2d4e559 @@ -1383,6 +1394,7 @@ SPEC CHECKSUMS: React-jsitracing: 36a2bbc272300313653d980de5ab700ec86c534a React-logger: 03f2f7b955cfe24593a2b8c9705c23e142d1ad24 React-Mapbuffer: 5e05d78fe6505f4a054b86f415733d4ad02dd314 + react-native-http-bridge-refurbished: e2e45508ec1573999ace69a0b880eee8f0e5bab2 react-native-restart: 7595693413fe3ca15893702f2c8306c62a708162 React-nativeconfig: 951ec32f632e81cbd7d40aebb3211313251c092e React-NativeModulesApple: 0b3a42ca90069119ef79d8b2327d01441d71abd4 diff --git a/example/package.json b/example/package.json index 06480e6f..01ae1291 100644 --- a/example/package.json +++ b/example/package.json @@ -21,6 +21,7 @@ "nativewind": "^2.0.11", "react": "18.2.0", "react-native": "0.74.0", + "react-native-http-bridge-refurbished": "1.2.9", "react-native-restart": "^0.0.27", "reflect-metadata": "^0.1.13", "stream-browserify": "^3.0.0", diff --git a/example/src/App.tsx b/example/src/App.tsx index 9204c929..bc688c23 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -1,22 +1,13 @@ -import React, {useEffect, useState} from 'react'; -import { - ActivityIndicator, - Button, - Clipboard, - SafeAreaView, - ScrollView, - Text, - View, -} from 'react-native'; -import 'reflect-metadata'; -import {createLargeDB, queryLargeDB} from './Database'; -import {dbSetupTests, queriesTests, runTests, blobTests} from './tests/index'; +import clsx from 'clsx'; import {styled} from 'nativewind'; +import {useEffect, useState} from 'react'; +import {SafeAreaView, ScrollView, Text, View} from 'react-native'; +import {BridgeServer} from 'react-native-http-bridge-refurbished'; +import 'reflect-metadata'; +import {constantsTests} from './tests/constants.spec'; import {registerHooksTests} from './tests/hooks.spec'; -import {moveAssetsDatabase, open} from '@op-engineering/op-sqlite'; -import clsx from 'clsx'; +import {blobTests, dbSetupTests, queriesTests, runTests} from './tests/index'; import {preparedStatementsTests} from './tests/preparedStatements.spec'; -import {constantsTests} from './tests/constants.spec'; import {reactiveTests} from './tests/reactive.spec'; const StyledScrollView = styled(ScrollView, { @@ -26,15 +17,7 @@ const StyledScrollView = styled(ScrollView, { }); export default function App() { - const [isLoading, setIsLoading] = useState(false); const [results, setResults] = useState([]); - const [times, setTimes] = useState([]); - const [accessingTimes, setAccessingTimes] = useState([]); - const [prepareTimes, setPrepareTimes] = useState([]); - const [prepareExecutionTimes, setPrepareExecutionTimes] = useState( - [], - ); - const [rawExecutionTimes, setRawExecutionTimes] = useState([]); useEffect(() => { setResults([]); runTests( @@ -46,48 +29,19 @@ export default function App() { constantsTests, reactiveTests, ).then(setResults); - }, []); - const createLargeDb = async () => { - setIsLoading(true); - await createLargeDB(); - setIsLoading(false); - }; + const server = new BridgeServer('http_service', true); - const queryLargeDb = async () => { - try { - setIsLoading(true); - const times = await queryLargeDB(); - setTimes(times.loadFromDb); - setAccessingTimes(times.access); - setPrepareTimes(times.prepare); - setPrepareExecutionTimes(times.preparedExecution); - setRawExecutionTimes(times.rawExecution); - } catch (e) { - console.error(e); - } finally { - setIsLoading(false); - } - }; + server.get('/test_results', async (req, res) => { + return {results}; + }); - const copyDbPathToClipboad = async () => { - const db = await open({name: 'dbPath.sqlite', encryptionKey: 'test'}); - db.execute( - 'CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY AUTOINCREMENT)', - ); - const path = db.getDbPath(); - await db.close(); - console.warn(path); - Clipboard.setString(path); - }; + server.listen(3000); - const openAssetsDb = async () => { - const moved = await moveAssetsDatabase({filename: 'sample.sqlite'}); - console.log('moved', moved); - const db = open({name: 'sample.sqlite'}); - const users = await db.execute('SELECT * FROM User'); - console.log('users', users.rows?._array); - }; + return () => { + server.stop(); + }; + }, []); let passingTests = 0; let failingTests = 0; @@ -105,68 +59,6 @@ export default function App() { return ( - - Tools - -