
# Hadoop HDFS Client Check

Check the access to the HDFS cluster.

    module.exports = header: 'HDFS Client Check', handler: ({options}) ->

Wait for the DataNode and NameNode.

      @call 'ryba/hadoop/hdfs_nn/wait', once: true, options.wait_hdfs_nn, conf_dir: options.conf_dir

## NameNode

Run an HDFS command requiring a NameNode. The NameNode will create the home
directory for the test user, we simply wait for the creation to be made once
the NameNode has started.

      @system.execute.assert
        header: 'NameNode'
        cmd: mkcmd.test options.test_krb5_user, "hdfs dfs -test -d /user/#{options.test.user.name}"
        retry: 5
        sleep: 5000

## DataNode

Run an HDFS command requiring a DataNode.

      @system.execute.assert
        header: 'DataNode'
        retry: 20
        sleep: 5000
        cmd: mkcmd.test options.test_krb5_user, """
        if hdfs dfs -test -f /user/#{options.test.user.name}/#{options.hostname}-hdfs; then exit 2; fi
        hdfs dfs -touchz /user/#{options.test.user.name}/#{options.hostname}-hdfs
        """
        code_skipped: 2
        retry: 5
        sleep: 5000

## Check Kerberos Mapping

Kerberos Mapping is configured in "core-site.xml" by the
"hadoop.security.auth_to_local" property. Hadoop provided a comman which take
the principal name as argument and print the converted user name.

      @system.execute
        header: 'Kerberos Mapping'
        cmd: "hadoop org.apache.hadoop.security.HadoopKerberosName #{options.test.krb5.user.principal}"
        if: options.core_site['hadoop.security.authentication'] is 'kerberos'
      , (err, data) ->
        throw Error "Invalid mapping" if not err and data.stdout.indexOf("#{options.test.krb5.user.principal} to #{options.test.user.name}") is -1

## Dependencies

    mkcmd = require '../../lib/mkcmd'
