@@ -2,7 +2,7 @@ const test = require('brittle')
2
2
const b4a = require ( 'b4a' )
3
3
const RAM = require ( 'random-access-memory' )
4
4
const NoiseSecretStream = require ( '@hyperswarm/secret-stream' )
5
- const { create, replicate, unreplicate, eventFlush } = require ( './helpers' )
5
+ const { create, replicate, unreplicate, eventFlush, createStored } = require ( './helpers' )
6
6
const { makeStreamPair } = require ( './helpers/networking.js' )
7
7
const Hypercore = require ( '../' )
8
8
@@ -1486,6 +1486,57 @@ test('replication updates on core copy', async function (t) {
1486
1486
await t . execution ( promise )
1487
1487
} )
1488
1488
1489
+ test ( 'get undefined block should not fail' , async function ( t ) {
1490
+ const a = await create ( )
1491
+ const b = await create ( a . key )
1492
+
1493
+ await a . append ( 'Hello' ) // Strictly one value is required for this
1494
+
1495
+ replicate ( a , b , t )
1496
+
1497
+ t . alike ( await b . get ( 0 ) , b4a . from ( 'Hello' ) )
1498
+
1499
+ try {
1500
+ await b . get ( undefined )
1501
+ } catch ( err ) {
1502
+ console . error ( err ) // Error: Could not satisfy length (EPARTIALREAD when using RAF)
1503
+ t . fail ( )
1504
+ }
1505
+ } )
1506
+
1507
+ test . skip ( 'get undefined block should not allow corruption on the writer' , async function ( t ) {
1508
+ const createWriter = createStored ( )
1509
+
1510
+ const a = createWriter ( )
1511
+ await a . append ( [ 'Hello' , 'World' ] ) // Strictly two values is required for this
1512
+
1513
+ const b = await create ( a . key )
1514
+
1515
+ replicate ( a , b , t )
1516
+
1517
+ await b . update ( { wait : true } )
1518
+
1519
+ t . alike ( await b . get ( 0 ) , b4a . from ( 'Hello' ) )
1520
+
1521
+ await b . get ( undefined ) // This triggers 100% CPU usage
1522
+
1523
+ // TODO: Check that writer can still write two values without corrupting itself? (unfinished due the glitch above)
1524
+ /* await a.close()
1525
+ await b.close()
1526
+
1527
+ const core = createWriter()
1528
+ await core.append(['Hello', 'World']) // Strictly two values is required for this
1529
+
1530
+ const clone = await create(core.key)
1531
+
1532
+ replicate(core, clone, t)
1533
+
1534
+ await clone.update({ wait: true })
1535
+
1536
+ t.alike(await b.get(0), b4a.from('Hello'))
1537
+ await b.get(undefined) // TODO: Over here triggers "Error: Could not load node: X" */
1538
+ } )
1539
+
1489
1540
async function waitForRequestBlock ( core ) {
1490
1541
while ( true ) {
1491
1542
const reqBlock = core . replicator . _inflight . _requests . find ( req => req && req . block )
0 commit comments