@@ -2,6 +2,7 @@ import {RmRecordDecoder, RmRecordEncoder} from '../../../rm';
22import { RpcCallMessage , RpcMessageDecoder , RpcMessageEncoder } from '../../../rpc' ;
33import { Nfsv3Decoder } from '../Nfsv3Decoder' ;
44import { Nfsv3Encoder } from '../Nfsv3Encoder' ;
5+ import { FullNfsv3Encoder } from '../FullNfsv3Encoder' ;
56import * as msg from '../messages' ;
67import { nfsv3 } from './fixtures' ;
78
@@ -11,8 +12,9 @@ const rpcDecoder = new RpcMessageDecoder();
1112const rpcEncoder = new RpcMessageEncoder ( ) ;
1213const nfsDecoder = new Nfsv3Decoder ( ) ;
1314const nfsEncoder = new Nfsv3Encoder ( ) ;
15+ const fullNfsEncoder = new FullNfsv3Encoder ( ) ;
1416
15- const assertCallRoundtrip = ( hex : string ) : void => {
17+ const assertCallRoundtrip = ( hex : string , fullEncoder : boolean = false ) : void => {
1618 const originalHex = hex . toLowerCase ( ) ;
1719 const buffer = Buffer . from ( originalHex , 'hex' ) ;
1820 rmDecoder . push ( new Uint8Array ( buffer ) ) ;
@@ -23,28 +25,40 @@ const assertCallRoundtrip = (hex: string): void => {
2325 const rpcMessage = rpcDecoder . decodeMessage ( rmRecord ) ;
2426 if ( ! ( rpcMessage instanceof RpcCallMessage ) ) throw new Error ( `Expected RPC Call message` ) ;
2527 const nfsRequest = nfsDecoder . decodeMessage ( rpcMessage . params ! , rpcMessage . proc , true ) as msg . Nfsv3Request ;
26- const nfsEncoded = nfsEncoder . encodeMessage ( nfsRequest , rpcMessage . proc , true ) ;
27- const rpcEncoded = rpcEncoder . encodeCall (
28- rpcMessage . xid ,
29- rpcMessage . prog ,
30- rpcMessage . vers ,
31- rpcMessage . proc ,
32- rpcMessage . cred ,
33- rpcMessage . verf ,
34- nfsEncoded ,
35- ) ;
36- const rmEncoded = rmEncoder . encodeRecord ( rpcEncoded ) ;
28+ let rmEncoded : Uint8Array ;
29+ if ( fullEncoder ) {
30+ rmEncoded = fullNfsEncoder . encodeCall (
31+ rpcMessage . xid ,
32+ rpcMessage . proc ,
33+ rpcMessage . cred ,
34+ rpcMessage . verf ,
35+ nfsRequest ,
36+ ) ;
37+ } else {
38+ const nfsEncoded = nfsEncoder . encodeMessage ( nfsRequest , rpcMessage . proc , true ) ;
39+ const rpcEncoded = rpcEncoder . encodeCall (
40+ rpcMessage . xid ,
41+ rpcMessage . prog ,
42+ rpcMessage . vers ,
43+ rpcMessage . proc ,
44+ rpcMessage . cred ,
45+ rpcMessage . verf ,
46+ nfsEncoded ,
47+ ) ;
48+ rmEncoded = rmEncoder . encodeRecord ( rpcEncoded ) ;
49+ }
3750 const encodedHex = Buffer . from ( rmEncoded ) . toString ( 'hex' ) . toLowerCase ( ) ;
3851 totalEncodedHex += encodedHex ;
3952 }
4053 expect ( totalEncodedHex ) . toBe ( originalHex ) ;
4154} ;
4255
4356test ( 'assert roundtrip of Call messages' , ( ) => {
44- assertCallRoundtrip ( nfsv3 . GETATTR . Call [ 0 ] ) ;
45- assertCallRoundtrip ( nfsv3 . GETATTR . Call [ 0 ] + nfsv3 . ACCESS . Call [ 0 ] ) ;
46- assertCallRoundtrip (
47- nfsv3 . ACCESS . Call [ 0 ] +
57+ assertCallRoundtrip ( nfsv3 . GETATTR . Call [ 0 ] , false ) ;
58+ assertCallRoundtrip ( nfsv3 . GETATTR . Call [ 0 ] , true ) ;
59+ assertCallRoundtrip ( nfsv3 . GETATTR . Call [ 0 ] + nfsv3 . ACCESS . Call [ 0 ] , false ) ;
60+ assertCallRoundtrip ( nfsv3 . GETATTR . Call [ 0 ] + nfsv3 . ACCESS . Call [ 0 ] , true ) ;
61+ const stream = nfsv3 . ACCESS . Call [ 0 ] +
4862 nfsv3 . GETATTR . Call [ 0 ] +
4963 nfsv3 . COMMIT . Call [ 0 ] +
5064 nfsv3 . RMDIR . Call [ 0 ] +
@@ -54,5 +68,7 @@ test('assert roundtrip of Call messages', () => {
5468 nfsv3 . REMOVE . Call [ 0 ] +
5569 nfsv3 . CREATE . Call [ 0 ] +
5670 nfsv3 . CREATE . Call [ 0 ] +
57- nfsv3 . LOOKUP . Call [ 0 ] ) ;
71+ nfsv3 . LOOKUP . Call [ 0 ] ;
72+ assertCallRoundtrip ( stream , false ) ;
73+ assertCallRoundtrip ( stream , true ) ;
5874} ) ;
0 commit comments