@Override public void onLine(String s) { wrapper[0] = parser.parseLine(s); } @Override
LsOutputBean build() { return new LsOutputBean( isFile, isDir, isLink, userReadable, userWritable, userExecutable, groupReadable, groupWritable, groupExecutable, otherReadable, otherWritable, otherExecutable, hasAcl, linkCount, size, date, user, group, name, linkTarget ); } }
@Test public void symLink() throws IOException { List<LsOutputBean> beans = new LsOutputParser().parse(stream("sym-link.txt")); Assert.assertEquals(1, beans.size()); LsOutputBean link = beans.get(0); Assert.assertFalse(link.isDir()); Assert.assertFalse(link.isFile()); Assert.assertTrue(link.isLink()); Assert.assertEquals("link_name", link.getName()); Assert.assertEquals("/absolute/link/target", link.getLinkTarget()); Assert.assertNotNull(link.getDate()); Assert.assertTrue(link.getDate().getTime() > 0); }
@Test public void parseAuthorizedKeys() throws Exception { InputStream is = getClass().getResourceAsStream("/keys/authorized_keys"); List<PublicKey> keys = KeyParser.parsePublicKeys(is, new CommonsBase64Decoder()); Assert.assertEquals(5, keys.size()); assertsRsaKey((RSAPublicKey)keys.get(0)); assertsDsaKey((DSAPublicKey)keys.get(1)); assertsEcdsaKey((ECPublicKey)keys.get(2)); assertsEcdsaKey384((ECPublicKey)keys.get(3)); assertsEcdsaKey521((ECPublicKey)keys.get(4)); }
@Test public void nameWithSpaces() throws IOException { List<LsOutputBean> beans = new LsOutputParser().parse(stream("name-with-spaces.txt")); Assert.assertEquals(4, beans.size()); Assert.assertEquals("dir name", beans.get(0).getName()); Assert.assertEquals("file name", beans.get(1).getName()); Assert.assertEquals("file 2", beans.get(2).getName()); Assert.assertEquals("link name", beans.get(3).getName()); Assert.assertEquals("/absolute/link target", beans.get(3).getLinkTarget()); }
@Test public void notExists() { LsOutputBean bean = new LsOutputBean("name"); Assert.assertFalse(bean.isExists()); }
@Test public void parsePubKeyEcdsa521() throws Exception { InputStream is = getClass().getResourceAsStream("/keys/ecdsa.key.pub.521"); List<PublicKey> keys = KeyParser.parsePublicKeys(is, new CommonsBase64Decoder()); assertsEcdsaKey521((ECPublicKey)keys.get(0)); }
@Test public void parsePubKeyRsa() throws Exception { InputStream is = getClass().getResourceAsStream("/keys/rsa.key.pub"); List<PublicKey> keys = KeyParser.parsePublicKeys(is, new CommonsBase64Decoder()); assertsRsaKey((RSAPublicKey)keys.get(0)); }
@Test public void parsePubKeyDsa() throws Exception { InputStream is = getClass().getResourceAsStream("/keys/dsa.key.pub"); List<PublicKey> keys = KeyParser.parsePublicKeys(is, new CommonsBase64Decoder()); assertsDsaKey((DSAPublicKey)keys.get(0)); }
@Test public void parsePubKeyEcdsa() throws Exception { InputStream is = getClass().getResourceAsStream("/keys/ecdsa.key.pub"); List<PublicKey> keys = KeyParser.parsePublicKeys(is, new CommonsBase64Decoder()); assertsEcdsaKey((ECPublicKey)keys.get(0)); }
@Test public void parsePubKeyEcdsa384() throws Exception { InputStream is = getClass().getResourceAsStream("/keys/ecdsa.key.pub.384"); List<PublicKey> keys = KeyParser.parsePublicKeys(is, new CommonsBase64Decoder()); assertsEcdsaKey384((ECPublicKey)keys.get(0)); }
@Test public void noSuchFile() throws IOException { List<LsOutputBean> beans = new LsOutputParser().parse(stream("no-such-file.txt")); Assert.assertTrue(beans.isEmpty()); }
@Test public void noSpaceInKey() throws Exception { String key = "no-space"; InputStream is = new ByteArrayInputStream(key.getBytes("UTF8")); List<PublicKey> keys = KeyParser.parsePublicKeys(is, new CommonsBase64Decoder()); Assert.assertTrue(keys.isEmpty()); }
protected static PublicKey parsePublicKeyDsa(byte[] keyBytes) throws InvalidKeySpecException, NoSuchAlgorithmException { // name is also included in bytes ByteBuffer byteBuffer = ByteBuffer.wrap(keyBytes); int nameLength = byteBuffer.getInt(); byteBuffer.position(nameLength + LENGTH_LENGTH); BigInteger p = readNext(byteBuffer); BigInteger q = readNext(byteBuffer); BigInteger g = readNext(byteBuffer); BigInteger y = readNext(byteBuffer); return createPubKeyDsa(y, p, q, g); }
protected static PublicKey parsePublicKeyRsa(byte[] keyBytes) throws InvalidKeySpecException, NoSuchAlgorithmException { // name is also included in bytes ByteBuffer byteBuffer = ByteBuffer.wrap(keyBytes); int nameLength = byteBuffer.getInt(); byteBuffer.position(nameLength + LENGTH_LENGTH); BigInteger exponent = readNext(byteBuffer); BigInteger modulus = readNext(byteBuffer); return createPubKeyRsa(exponent, modulus); }
@Override public String readSymbolicLink() throws IOException { logger.trace("[{}] readSymbolicLink()", name); return bean.getLinkTarget(); }
@Override public void onLine(String s) { LsOutputBean bean = parser.parseLine(s); if (bean != null) { beans.add(bean); } } @Override
@Override public void onCommandResult(int commandCode, int exitCode, List<String> output) { if (exitCode == 0) { wrapper[0] = parser.parseLine(output.get(0)); } else { logger.error("could not run 'ls' command"); if (output != null) { for (String line : output) { logger.error("{}", line); } } } } });