Skip to content

Commit

Permalink
Add tests for region loading
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanblock committed Sep 10, 2023
1 parent 6b6b24c commit a006532
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/get-region.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
let { existsSync, readFileSync } = require('fs/promises')
let { existsSync, readFileSync } = require('fs')
let { join } = require('path')
let os = require('os')
let ini = require('ini')
Expand All @@ -19,7 +19,7 @@ module.exports = function getRegion (params) {
if (configRegion) return configRegion
}

throw ReferenceError('Must supply AWS region via params, environment variables, or config file')
throw ReferenceError('You must supply AWS region via params, environment variables, or config file')
}

function getRegionFromEnv () {
Expand Down
129 changes: 129 additions & 0 deletions test/unit/src/get-region-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
let { readFileSync } = require('fs')
let os = require('os')
let { join } = require('path')
let test = require('tape')
let mockFs = require('mock-fs')
let { resetAWSEnvVars } = require('../../lib')
let cwd = process.cwd()
let sut = join(cwd, 'src', 'get-region.js')
let getRegion = require(sut)

let mock = join(cwd, 'test', 'mock')
let east1 = 'us-east-1'
let west1 = 'us-west-1'
let west2 = 'us-west-2'
let num = 1
let configMock = join(mock, '.aws', 'config')

test('Set up env', t => {
t.plan(1)
t.ok(getRegion, 'getRegion module is present')
})

test('Get region from passed params', t => {
t.plan(1)
let region = east1
let result = getRegion({ region })
t.equal(result, region, 'Returned correct region from passed params')
})

test('Get region from env vars', t => {
t.plan(3)
resetAWSEnvVars()
let result

process.env.AWS_REGION = east1
result = getRegion({})
t.equal(result, east1, 'Returned correct region from env vars')
resetAWSEnvVars()

process.env.AWS_DEFAULT_REGION = east1
result = getRegion({})
t.equal(result, east1, 'Returned correct region from env vars')
resetAWSEnvVars()

process.env.AMAZON_REGION = east1
result = getRegion({})
t.equal(result, east1, 'Returned correct region from env vars')
resetAWSEnvVars()
})

test('Get region from config file', t => {
t.plan(5)
resetAWSEnvVars()
let result
let profile = 'profile_1'

// Default config file location
let home = os.homedir()
let configFile = join(home, '.aws', 'config')
mockFs({ [configFile]: readFileSync(configMock) })
process.env.AWS_SDK_LOAD_CONFIG = true
result = getRegion({})
t.equal(result, west1, 'Returned correct region from config file (~/.aws file location)')
mockFs.restore()
resetAWSEnvVars()

// Configured file locations
process.env.AWS_SDK_LOAD_CONFIG = true
process.env.AWS_CONFIG_FILE = configMock
result = getRegion({})
t.equal(result, west1, 'Returned correct region from config file (default profile)')
resetAWSEnvVars()

// params.profile
process.env.AWS_SDK_LOAD_CONFIG = true
process.env.AWS_CONFIG_FILE = configMock
result = getRegion({ profile: 'profile_1' })
t.equal(result, west2, 'Returned correct region from config file (params.profile)')
resetAWSEnvVars()

// AWS_PROFILE env var
process.env.AWS_SDK_LOAD_CONFIG = true
process.env.AWS_CONFIG_FILE = configMock
process.env.AWS_PROFILE = profile
result = getRegion({})
t.equal(result, west2, 'Returned correct region from config file (AWS_PROFILE env var)')
resetAWSEnvVars()

// Config file checks are skipped in Lambda
process.env.AWS_SDK_LOAD_CONFIG = true
process.env.AWS_CONFIG_FILE = configMock
process.env.AWS_LAMBDA_FUNCTION_NAME = 'true'
t.throws(() => {
getRegion({})
}, /You must supply AWS region/, 'Did not look for config file on disk in Lambda')
resetAWSEnvVars()
})

test('Validate config', t => {
t.plan(5)
resetAWSEnvVars()

t.throws(() => {
getRegion({ region: num })
}, /Region must be a string/, 'Threw on invalid region')

t.throws(() => {
getRegion({ region: 'us-south-14' })
}, /Invalid region specified/, 'Threw on invalid region')

t.throws(() => {
process.env.AWS_SDK_LOAD_CONFIG = true
process.env.AWS_CONFIG_FILE = configMock
process.env.AWS_PROFILE = 'idk'
getRegion({})
}, /Profile not found/, 'Threw on missing profile')
resetAWSEnvVars()

t.throws(() => {
process.env.AWS_SDK_LOAD_CONFIG = true
process.env.AWS_CONFIG_FILE = 'meh'
getRegion({})
}, /You must supply AWS region/, 'Threw on no available config (after attempting to checking filesystem)')
resetAWSEnvVars()

t.throws(() => {
getRegion({})
}, /You must supply AWS region/, 'Threw on no available config')
})

0 comments on commit a006532

Please sign in to comment.