elasticsearch-api/spec/integration/api_key_spec.rb (83 lines of code) (raw):
# frozen_string_literal: true
# Licensed to Elasticsearch B.V. under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch B.V. licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
require 'base64'
require_relative './integration_helper'
describe 'API keys' do
before do
CLIENT.security.put_user(
username: client_username,
body: { password: 'test-password', roles: ['superuser'] }
)
end
after do
CLIENT.security.delete_user(username: client_username)
end
let(:client_username) { "query_api_keys_#{Time.new.to_i}" }
let(:credentials) { Base64.strict_encode64("#{client_username}:test-password") }
let(:client) do
Elasticsearch::Client.new(
host: HOST,
transport_options: TRANSPORT_OPTIONS.merge(headers: { Authorization: "Basic #{credentials}" })
)
end
it 'queries API keys' do
key_name1 = "query-key-1-#{Time.new.to_i}"
response = client.security.create_api_key(
body: {
name: key_name1,
role_descriptors: {},
expiration: '1d',
metadata: { search: 'this' }
}
)
expect(response['name']).to eq key_name1
expect(response['api_key']).not_to be nil
api_key_id1 = response['id']
key_name2 = "query-key-2-#{Time.new.to_i}"
response = client.security.create_api_key(
body: {
name: key_name2,
expiration: '2d',
role_descriptors: { 'role-a' => { "cluster": ['monitor'] } },
metadata: { search: false }
}
)
expect(response['name']).to eq key_name2
expect(response['api_key']).not_to be nil
api_key_id2 = response['id']
key_name3 = "query-key-3#{Time.new.to_i}"
response = client.security.create_api_key(
body: {
name: key_name3,
expiration: '3d'
}
)
expect(response['name']).to eq key_name3
expect(response['api_key']).not_to be nil
api_key_id3 = response['id']
response = client.security.authenticate
response['username']
response = client.security.query_api_keys(
body: {
query: { wildcard: { name: key_name1 } }
}
)
expect(response['total']).to eq 1
expect(response['count']).to eq 1
expect(response['api_keys'].first['id']).to eq api_key_id1
response = client.security.query_api_keys(
body: {
query: { wildcard: { name: key_name2 } }
}
)
expect(response['total']).to eq 1
expect(response['count']).to eq 1
expect(response['api_keys'].first['id']).to eq api_key_id2
response = client.security.query_api_keys(
body: {
query: { wildcard: { name: key_name3 } }
}
)
expect(response['total']).to eq 1
expect(response['count']).to eq 1
expect(response['api_keys'].first['id']).to eq api_key_id3
end
end