11cb0ef41Sopenharmony_ci// Copyright Joyent, Inc. and other Node contributors. 21cb0ef41Sopenharmony_ci// 31cb0ef41Sopenharmony_ci// Permission is hereby granted, free of charge, to any person obtaining a 41cb0ef41Sopenharmony_ci// copy of this software and associated documentation files (the 51cb0ef41Sopenharmony_ci// "Software"), to deal in the Software without restriction, including 61cb0ef41Sopenharmony_ci// without limitation the rights to use, copy, modify, merge, publish, 71cb0ef41Sopenharmony_ci// distribute, sublicense, and/or sell copies of the Software, and to permit 81cb0ef41Sopenharmony_ci// persons to whom the Software is furnished to do so, subject to the 91cb0ef41Sopenharmony_ci// following conditions: 101cb0ef41Sopenharmony_ci// 111cb0ef41Sopenharmony_ci// The above copyright notice and this permission notice shall be included 121cb0ef41Sopenharmony_ci// in all copies or substantial portions of the Software. 131cb0ef41Sopenharmony_ci// 141cb0ef41Sopenharmony_ci// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 151cb0ef41Sopenharmony_ci// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 161cb0ef41Sopenharmony_ci// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 171cb0ef41Sopenharmony_ci// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 181cb0ef41Sopenharmony_ci// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 191cb0ef41Sopenharmony_ci// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 201cb0ef41Sopenharmony_ci// USE OR OTHER DEALINGS IN THE SOFTWARE. 211cb0ef41Sopenharmony_ci 221cb0ef41Sopenharmony_ci// Flags: --expose-internals 231cb0ef41Sopenharmony_ci'use strict'; 241cb0ef41Sopenharmony_ciconst common = require('../common'); 251cb0ef41Sopenharmony_ci 261cb0ef41Sopenharmony_ciconst fixtures = require('../common/fixtures'); 271cb0ef41Sopenharmony_ci 281cb0ef41Sopenharmony_ciconst assert = require('assert'); 291cb0ef41Sopenharmony_ciconst fs = require('fs'); 301cb0ef41Sopenharmony_ciconst path = require('path'); 311cb0ef41Sopenharmony_ci 321cb0ef41Sopenharmony_ci// 0 if not found in fs.constants 331cb0ef41Sopenharmony_ciconst { O_APPEND = 0, 341cb0ef41Sopenharmony_ci O_CREAT = 0, 351cb0ef41Sopenharmony_ci O_EXCL = 0, 361cb0ef41Sopenharmony_ci O_RDONLY = 0, 371cb0ef41Sopenharmony_ci O_RDWR = 0, 381cb0ef41Sopenharmony_ci O_SYNC = 0, 391cb0ef41Sopenharmony_ci O_DSYNC = 0, 401cb0ef41Sopenharmony_ci O_TRUNC = 0, 411cb0ef41Sopenharmony_ci O_WRONLY = 0 } = fs.constants; 421cb0ef41Sopenharmony_ci 431cb0ef41Sopenharmony_ciconst { stringToFlags } = require('internal/fs/utils'); 441cb0ef41Sopenharmony_ci 451cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('r'), O_RDONLY); 461cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('r+'), O_RDWR); 471cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('rs+'), O_RDWR | O_SYNC); 481cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('sr+'), O_RDWR | O_SYNC); 491cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('w'), O_TRUNC | O_CREAT | O_WRONLY); 501cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('w+'), O_TRUNC | O_CREAT | O_RDWR); 511cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('a'), O_APPEND | O_CREAT | O_WRONLY); 521cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('a+'), O_APPEND | O_CREAT | O_RDWR); 531cb0ef41Sopenharmony_ci 541cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('wx'), O_TRUNC | O_CREAT | O_WRONLY | O_EXCL); 551cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('xw'), O_TRUNC | O_CREAT | O_WRONLY | O_EXCL); 561cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('wx+'), O_TRUNC | O_CREAT | O_RDWR | O_EXCL); 571cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('xw+'), O_TRUNC | O_CREAT | O_RDWR | O_EXCL); 581cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('ax'), O_APPEND | O_CREAT | O_WRONLY | O_EXCL); 591cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('xa'), O_APPEND | O_CREAT | O_WRONLY | O_EXCL); 601cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('as'), O_APPEND | O_CREAT | O_WRONLY | O_SYNC); 611cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('sa'), O_APPEND | O_CREAT | O_WRONLY | O_SYNC); 621cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('ax+'), O_APPEND | O_CREAT | O_RDWR | O_EXCL); 631cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('xa+'), O_APPEND | O_CREAT | O_RDWR | O_EXCL); 641cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('as+'), O_APPEND | O_CREAT | O_RDWR | O_SYNC); 651cb0ef41Sopenharmony_ciassert.strictEqual(stringToFlags('sa+'), O_APPEND | O_CREAT | O_RDWR | O_SYNC); 661cb0ef41Sopenharmony_ci 671cb0ef41Sopenharmony_ci('+ +a +r +w rw wa war raw r++ a++ w++ x +x x+ rx rx+ wxx wax xwx xxx') 681cb0ef41Sopenharmony_ci .split(' ') 691cb0ef41Sopenharmony_ci .forEach(function(flags) { 701cb0ef41Sopenharmony_ci assert.throws( 711cb0ef41Sopenharmony_ci () => stringToFlags(flags), 721cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_VALUE', name: 'TypeError' } 731cb0ef41Sopenharmony_ci ); 741cb0ef41Sopenharmony_ci }); 751cb0ef41Sopenharmony_ci 761cb0ef41Sopenharmony_ciassert.throws( 771cb0ef41Sopenharmony_ci () => stringToFlags({}), 781cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_VALUE', name: 'TypeError' } 791cb0ef41Sopenharmony_ci); 801cb0ef41Sopenharmony_ci 811cb0ef41Sopenharmony_ciassert.throws( 821cb0ef41Sopenharmony_ci () => stringToFlags(true), 831cb0ef41Sopenharmony_ci { code: 'ERR_INVALID_ARG_VALUE', name: 'TypeError' } 841cb0ef41Sopenharmony_ci); 851cb0ef41Sopenharmony_ci 861cb0ef41Sopenharmony_ciif (common.isLinux || common.isOSX) { 871cb0ef41Sopenharmony_ci const tmpdir = require('../common/tmpdir'); 881cb0ef41Sopenharmony_ci tmpdir.refresh(); 891cb0ef41Sopenharmony_ci const file = path.join(tmpdir.path, 'a.js'); 901cb0ef41Sopenharmony_ci fs.copyFileSync(fixtures.path('a.js'), file); 911cb0ef41Sopenharmony_ci fs.open(file, O_DSYNC, common.mustSucceed((fd) => { 921cb0ef41Sopenharmony_ci fs.closeSync(fd); 931cb0ef41Sopenharmony_ci })); 941cb0ef41Sopenharmony_ci} 95